2017-10-05 61 views
5

我如何找到什么提交分支最初分支后,上游分支已经重新设置?我如何找到共同的祖先来rebase?

我经常需要重订几个相关的分支时我拉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! 

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

git rebase --onto b1 I 

我的问题:如何找到I

回答

5

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

如果您确实需要手动执行此操作(例如,您使用的是旧版本的Git),则可以自行查看reflog。 git log -g b1git reflog show b1会向您显示b1的引用日志,并且您可以使用它来确定在重新绑定之前最后一次提交的内容。

+0

这可能解释我的问题:我使用多个工作目录,将.git中的目录符号链接到我的“主”工作目录。所以签出'b1'的workdir的reflog和签出'b2'的workdir是分开的。 如果我在重新绑定b1之后不立即重新绑定'b2'(或者在更新'b2'之前多次重新绑定'b1'),手工查看reflog以查找正确的提交。我想我可以交叉引用这两个reflog,但是,寻找一个不在'master'中的常见提交? – mgiuffrida

+0

无论您使用“b1”重新分配哪一个工作日,只需检查该目录中的reflog即可。 –

相关问题