Git替换本地分支并将我的分支重新设置在新分支之上
Posted
技术标签:
【中文标题】Git替换本地分支并将我的分支重新设置在新分支之上【英文标题】:Git replace the local branch and rebase my branch on top of the new one 【发布时间】:2022-01-09 02:16:12 【问题描述】:我很确定这个问题的答案可以在 SO 上找到,至少在几个不同的帖子上是零零散散的。我有一个由不同分支创建的分支。我在我的分支中做了一些提交,然后另一个分支的所有者强制将一些提交推送到我的分支上。在那之后,我又做了一些提交。
现在我被要求获取他的干净版本(我认为他的意思是替换我的本地分支),然后将我的分支重新设置在新分支(他的?)之上,以便他的提交(“强制推送"的) 将消失。我认为他想要的是永远不会在我的分支历史中看到他的提交。
执行此操作的步骤是什么?我发现很多参考文献
git fetch
git reset --hard @u
git rebase -i origin/master
但不确定结果,因为我似乎无法摆脱他的承诺。对于任何需要我正在谈论的内容的视觉图片的人,这里是:
任何建议将不胜感激。顺便说一句,我正在使用 Git Bash。
TIA, 埃德
编辑:根据要求,这里是“git log --graph --oneline --all”命令的输出(对不起,我必须涵盖所有的 cmets,因为有些可能包含敏感信息):
【问题讨论】:
如果我理解正确,听起来它应该是一个相当简单的交互式变基,丢弃不需要的提交。可能只是git rebase -i FIRST_COMMIT_TO_REMOVE~
,并将有问题的提交标记为drop
。见***.com/a/42522493
@Hasturkun 感谢您的建议。请参阅我对尼古拉的第二条评论。我需要摆脱提交,但保留其中包含的代码更改。
如果你想保留他的改动,你可以squash
或者fixup
把这些统一到一个新的提交中(虽然我不得不说,你的意图有点不清楚,听起来像你想要的这些已从历史中删除,这意味着它们将不存在)。我会提前提到,如果打算让他的提交发生在您的提交之后(或相反),您还可以选择重新排序提交。
【参考方案1】:
提示,将git log --graph --oneline --all
的输出与您的 HEAD 一起发布,以便我们更好地了解正在发生的事情。
如果我理解正确,您应该尝试以下操作:(确保您不强制推送某些内容。在 reset
上使用哈希码作为参数)
git reset his-last-commit
(在他提交后取消提交最近的编辑)
git stash
(保存它们)
git reset --hard your-commit
(这会删除他的提交)
git stash pop
(这会将您最近的编辑应用到顶部)
如果这不起作用,您应该尝试git cherry-pick
【讨论】:
“git reset --hard your-commit”命令中我的“your-commit”是哪一个?在他添加 4 次提交之前,这会是我的最后一次提交吗?另外,如果这是我在他添加他的东西之前的最后一次提交,那么这个“reset --hard”不会导致他的更改丢失吗? “我认为他想要的是永远不会在我的分支历史中看到他的提交。”这不是意味着它应该失去他的变化吗? 不,他不想丢失他的更改,因为它们很重要。他只是希望这 4 个提交远离分支的历史。他确实提到他想要的可以通过变基来实现,所以@Hasturkun 的建议可能是有道理的以上是关于Git替换本地分支并将我的分支重新设置在新分支之上的主要内容,如果未能解决你的问题,请参考以下文章
您如何获取 git diff 文件,并将其应用到作为同一存储库副本的本地分支?