2012-07-04 133 views
1

我們處於複雜的情況。我們有這個倉庫的王:Git只合並修復,沒有從其他分支合併

 C1  C4    C5 
devel *---*---*---*-----------*--------- 
       \_____ 
        \ C2 C3  
fix-ie *--*---------*----*----*-------*--- 
        M1     \___ 
              \ 
testing *----*-------------------------------*--- 
              M2 

正如你所看到的,devel被合併到fix-ie分支中。

問題是,「測試」分支不應該有「devel的」的提交(我們不想C1),但我們需要合併固定,即在「測試」,以只有C2和C3承諾

如果我這樣做:

git checkout testing 
git merge fix-ie 

我將在我的測試分支M1合併...所以C1提交是在我們的測試分支中找到。這不是我們想要的。

如何避免這種情況?

請記住,我簡化了例子,在我們的fix-ie和devel分支中有很多合併,很多提交。

謝謝:)

回答

0

一種方式做到這一點是建立一個獨立的分支fix-ie排除合併從devel分支提交。然後,您可以將該分支合併到您的testing分支。

您可以使用git reflog show -all搜索您的推薦日誌,以從您想要忽略的devel分支中查找合併提交。

+0

但問題是fix-ie和testing是從「devel」分支的...... devel是主分支,測試是從devel分支出來的,並且有一些針對測試環境的修復。 devel是爲下一個版本製作的。在修復中有很多合併 - 即(來自devel) – Metal3d

0

看來我找到了解決方案。

獲取第一個合併SHA,例如名爲「123abc」。我可以這樣做:

git rev-list --no-merges --reverse --topo-order debug-ie ^123abc 

然後每一行都是一個提交,但沒有合併在列表中。

所以我可以做的方式是:

for SHA in $(git rev-list --no-merges --reverse --topo-order debug-ie ^123abc); do 
    git cherry-pick $SHA 
done 

如果我錯了,請告訴我...但它似乎是一個不錯的主意。

+0

那麼你實際上覆制了所有的提交,這並不總是最好的主意 –