0

我有一个本地 ref,其中包含我最近执行的一些分支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的建议使用,并在两个变基发生之前恢复到原始状态,然后按照我的建议尝试。 git reset --hard HEAD@{#}git rebase branchname --no-ff

我的最终问题是这个(还有一些额外的):

我可以简单地回到第一次提交之前的最后一次提交,rebase还是需要单独回滚每个变基?每个顶部分支是否都与我以前拥有的完全一样(显示我正在寻找的非快速转发合并)?我是否让这太难了/有没有更简单的方法来做到这一点?有什么是我忽略的吗?

谢谢。

4

2 回答 2

3

如果您将每个分支重置为在该分支的变基发生之前它所在的提交,它将就像变基从未发生过一样。每个分支都有自己独立于任何其他分支的历史记录,因此您需要单独重置每个分支。

于 2012-01-06T17:01:30.773 回答
0

请看一下git reflog。它有以前的参考资料。git reset --hard HEAD@{2}您可以通过获取 HEAD 指向的第二个最近提交来重置 reflog 中的提交。同样适用于分支机构。

你甚至可以在不检查它们的情况下这样做:

git push . +topic1@{1}:topic1
git push . +topic2@{1}:topic2
于 2012-01-06T19:07:25.920 回答