2010-05-21 119 views
2

看看git-rebase手冊頁,我沒有看到任何看起來像我想要的圖表(除了有些似乎與我想要的相反),並且玩弄--onto沒有得到我也是我想要的。複雜的git rebase操作

讓我看看,如果我能畫一個圖像是從git-rebase手冊頁(垂直條的左邊是做出正確的Markdown格式它)中的那些:

|  o-o-o-o-branch2 
| /
| -o-o-A-master-o-branch1-o-o-my_WIP_branch 

branch1可能實際上並不重要這裏,但我反正包括它。我想要做的就是這個(省略' s表示,通常伴隨着git-rebase手冊頁圖表):

|  o-o-o-o-branch2-o-branch1-o-o-my_WIP_branch 
| /
|-o-o-A-master 

基本上,我希望把我的my_WIP_branch工作在branch2工作,而不必應付合並涉及標記爲A的提交組的衝突。有沒有辦法做到這一點,而不是手動櫻桃選擇每個提交branch2(或者至少有可能是一個簡單的方法來做到這一點?)?順便說一下,會有合併衝突,所以理想情況下它應該是一個git命令或一組git命令,可以優雅地處理這些衝突(例如,git rebase可以優雅地處理它們,git amgit apply則不會)。

回答

4

奇怪...因爲這應該是rebase --onto的經典案例。

您有:

 o-o-o-o <--branch2 
    /
o-o-o-A <--master 
     \ 
     -o-o <--branch1 
      \ 
       -o-o <--my_WIP_branch 

你想:

    -o-o <--my_WIP_branch 
       /
      -o-o <--branch1 
      /
    o-o-o-o <--branch2 
    /
o-o-o-A <--master 

這應該是:

$ git rebase --onto branch2 master my_WIP_branch 

將重放任何承諾不是高手,但是從那裏你可以達到my_WIP_branch(表示來自分支2的提交不符合條件)。
請參閱我的other SO answer for merge conflict instructions以及Git手冊的"resolving merge conflicts" section。 (你可以accept all merges with your version, for instance

+0

正確的,工作。 '--onto'有6種可能的排列,所以我想我沒有嘗試正確的排列。 – asmeurer 2010-05-22 00:47:24

+0

@asmeurer:其實,考慮到'master'是'my_WIP_branch'和'branch2'的共同祖先,一個簡單的'git checkout my_WIP_branch'然後'git rebase branch2'應該已經足夠了。 – VonC 2010-05-22 07:14:12

+0

不,問題在於'master'不是'branch2'的祖先(再看一下我的圖),而且我還沒有準備好處理與'master2'重新綁定到master的合併衝突。 – asmeurer 2010-05-23 17:04:36