'git reset --hard'多个重新分支

时间:2012-01-06 16:49:33

标签: git branch git-rebase git-reset

我有一个本地参考,其中包含我最近在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?每个顶级分支是否与我以前完​​全相同(显示我正在寻找的非快速转发合并)?我这样做太难了/有更简单的方法吗?我忽略了什么?

感谢。

2 个答案:

答案 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