2017-10-05 59 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即可。 –

相關問題