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

mgi*_*ida 5 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
Run Code Online (Sandbox Code Playgroud)

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


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

$ git checkout b2
$ git rebase  # crap!
Run Code Online (Sandbox Code Playgroud)

为了避免这种情况,我想做的是b2 将其重新分支到它分支的原始提交上,即I.我想申请一组提交的是I..b2,这意味着我要使用I作为上游rebase(即使它不是一个分支了).现在我必须指定--onto b1(否则git将应用我的更改I,这是我已经拥有的).

git rebase --onto b1 I
Run Code Online (Sandbox Code Playgroud)

我的问题:我如何找到I

Lil*_*ard 5

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

如果您确实需要手动执行此操作(例如,您使用的是旧版本的Git),您可以自己查看reflog.要么git log -g b1或者git reflog show b1要显示b1的reflog,你可以用它来弄清楚rebase之前的最后一次提交.