我有一个本地参考,其中包含我最近在git rebase
上执行的几个分支:
A---B---C---D master
\
E---F---G topic1
\
H---I---J topic2
将其变为:
A---B---C---D master
\
E'---F'---G' topic1
\
H'---I'---J' topic2
使用以下命令集:
git checkout topic1
git rebase master
git checkout topic2
git rebase topic1
我无意中忘记了git rebase --no-ff
,以便跟踪我之前合并过的所有分支。现在,我无法轻易告诉(使用gitk --all
)合并发生的位置。我知道它们发生在HEAD@{E}
和HEAD@{J}
之间的某个地方,但是没有单独进行每次提交,我就迷失了。
所以,我认为我会使用git reflog
作为建议here,以及git reset --hard HEAD@{#}
在两个rebase发生之前恢复到原始状态,然后尝试{{1正如我所说的那样。
我可以简单地回到第一个git rebase branchname --no-ff
之前的最后一次提交,还是我需要单独回滚每个rebase?每个顶级分支是否与我以前完全相同(显示我正在寻找的非快速转发合并)?我这样做太难了/有更简单的方法吗?我忽略了什么?
感谢。
答案 0 :(得分:3)
如果你将每个分支重置为它在该分支的rebase发生之前所处的提交,那就像rebase从未发生过一样。每个分支都有自己的历史,独立于任何其他分支,因此您需要单独重置每个分支。
答案 1 :(得分:0)
请查看git reflog
。它有以前的参考。您可以通过执行git reset --hard HEAD@{2}
来重置为reflog中的提交,以获取HEAD指向的第二个最新提交。同样适用于分支机构。
你甚至可以这样做,而不是像这样检查出来:
git push . +topic1@{1}:topic1
git push . +topic2@{1}:topic2