【发布时间】: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。见stackoverflow.com/a/42522493 -
@Hasturkun 感谢您的建议。请参阅我对尼古拉的第二条评论。我需要摆脱提交,但保留其中包含的代码更改。
-
如果你想保留他的改动,你可以
squash或者fixup把这些统一到一个新的提交中(虽然我不得不说,你的意图有点不清楚,听起来像你想要的这些已从历史中删除,这意味着它们将不存在)。我会提前提到,如果打算让他的提交发生在您的提交之后(或相反),您还可以选择重新排序提交。