Git:交互式变基列出了不正确(太多)的提交

26
当我运行git rebase -i HEAD~2时,它列出了11个提交记录而不是2个。为什么?
在此之前我做的是:
  1. 检出upstream/branchA
  2. 将我新的本地分支A与主分支进行了rebase
  3. 尝试将本地分支A推送回upstream
    • Git提示分支不同步,要先拉取upstream
  4. 将upstream/branchA合并到本地分支A
  5. 将本地分支A推送回upstream/branchA(成功)

1
虽然“HEAD〜2”表示“后退2步”,但更具体地说是“第一个父级的第一个父级”,强调“第一个”,因为可能会有第二个父级(甚至更多)。当您发现这样的“额外”提交时,意味着混合提交(第二个父级)在其中,您将包括合并两侧的提交。 - torek
那么,怎样使其表现得“正常”呢? - Jakob Jingleheimer
HEAD~2^2 我猜是这样的吧?更多关于 git 相对提交符号的细节请参见这里 - Willem Van Onsem
取决于提交图的形状以及您想要重新定位/作为结果的内容。 - torek
2个回答

18

这取决于你的git树的结构。例如,一个“合并”提交可以有两个或更多的父提交。根据此,你的提交可能有多个祖先提交。

你可能需要使用rebase。

git rebase -i HEAD^1^2
git rebase -i HEAD^2^1
git rebase -i HEAD^2^2

其中之一。

有关git的相对提交符号,请参见此处获取更多详细信息。


谢谢解释!最终我还是进行了强制推送,因为:1.我的分支实际上是最新的(没有人从旧版本中工作);2.我不想让那种奇怪的多父行为持续存在。如果再次发生这种情况,我会尝试上述方法。在执行上述任一操作后,git rebase -i HEAD~2是否会恢复到“正常”状态? - Jakob Jingleheimer

1
我通过先与主分支进行变基,然后对其余的提交进行修复来解决了这个问题。
git rebase master
git rebase -i HEAD~n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接