如何找到重新定位的共同祖先?

时间:2017-10-05 21:19:32

标签: git

在上游分支重新定位后,如何找到分支最初分支的内容?

当我拉origin/master时,我经常需要重新定义几个相关的分支:

Before rebasing b1:

O1 - O2 - O3 - O4 - O5 - O6 <=master
       \
        G - H - I <=b1
                 \
                  T - U - V <=b2

After rebasing b1:

O1 - O2 - O3 - O4 - O5 - O6 <=master
       \                   \
        G - H - I           G' - H' - I' <=b1
                 \
                  T - U - V <=b2

重新定位b1需要很多冲突解决方案。为了避免在重新定位b2时解决相同的冲突,如何找到最初分支的提交b2,即I

rebase迫使我重新解决所有原始冲突Branch1

$ git checkout b2
$ git rebase  # crap!

为了避免这种情况,我想做的是将#{1}} 重新绑定到分支的原始提交,即b2。我想要应用的提交集是I,这意味着我想I..b2使用I作为rebase上游(即使它是&#39}不再是一个分支)。现在我必须指定--onto b1(否则git会将我的更改应用到I,这就是我已经拥有的。)

git rebase --onto b1 I

我的问题:如何找到I

1 个答案:

答案 0 :(得分:5)

你不需要。 Git实际上可以使用reflog来解决这个问题。只需将--fork-point标记传递给git rebase,例如git rebase --fork-point b1

如果您确实需要手动执行此操作(例如,您使用旧版本的Git),您可以自己查看reflog。 git log -g b1git reflog show b1将显示b1的reflog,您可以使用它来确定rebase之前的最后一次提交。