2016-01-27 66 views
2

我知道標題有點毛茸茸 - 因此引用了!「櫻桃選擇合併」的最簡單方法

假設我有一個分支b_feature,它從主開發分支b_master分支併合並。還有另一個分支b_release,我希望將這些更改添加到(作爲一個發佈版本)。 b_masterb_release已經發生分歧,不會再合併。

---------Bm----k1-----Mm-----> b_master (k1 isn't to be included in b_release) 
\  \  /
    \  c1--c2--c3 (b_feature) 
    \ 
    \----Br---------Mr-----> b_release 
      \  /
      cA-cB-cC 

我知道我能摘櫻桃整個事情與git cherry-pick -m Mm一個差異,給

 ----Br--Squashed----> b_release 

其中Squashed是提交包含該功能的全部變化,隨着消息合併Mm

但是,如果我想保留更改歷史記錄和單個提交消息呢?我可以隨時手動摘櫻桃與此近似的工作流程:

git checkout b_release 
git checkout -b b_release_feature 
git cherry-pick c1^..c3 
git checkout b_release 
git merge b_release_feature 
git commit --amend --reedit-message=Mm 
git branch -d b_release_feature 

但是,這似乎是一個笨拙的解決方法,以更優雅的解決方案,我不知道!

rebase --onto b_release Bm Mm也似乎並沒有產生我期待的結果。

還有更好的方法嗎?

回答

-1

我認爲rebase是一個比櫻桃挑選更適合的工具,儘管其差異很小。這是我會如何做到的。首先將b_release_feature分支附加到源分支,然後將其重新綁定到目標分支上。

git checkout -b b_release_feature c3 
git rebase --onto b_release c1^ b_release_feature 
git checkout b_release 
git merge b_release_feature 
git commit --amend --reedit-message=Mm 
git branch -d b_release_feature