2015-09-04 28 views
8

我對每個功能都有一個Git分支。但是,有時候,當在分支A中開發時,我想測試如果B也被應用,A會如何表現。Git:兩​​個功能分支的測試組合

目前,我用這個:

git checkout A 
git branch base 
git merge B 
git reset --mixed base 
git branch -D base 

是否有一個較短的方式做到這一點?

此外:如果AB不共享相同的祖先?

o -- o -- o [A] 
\-- x -- o [v1_0] 
      \ -- b1 -- b2 -- o [B] 

我怎麼能這樣做更容易?

git checkout A 
git branch ABase 
git cherry-pick v1_0..B // only applying b1,b2 not x 
git reset --mixed ABase 
git branch -D ABase 
+2

'git merge v1_0..B'?你不是指'git cherry-pick v1_0..B'代替嗎? – Jubobs

+0

@Jubobs:是的,我會改變它櫻桃採摘。此後我重置爲A. – schoetbi

回答

1

一種可能性:

$ git checkout $(git rev-parse A) 
$ git merge B 
$ git checkout - # returns you to wherever you were before 

這將檢查出潛在的修訂(讓你在一個分離的頭狀態),使得從那裏的變化。這種方法的好處是你不再需要創建和刪除分支。這不會使工作流程變得更短,但您應該能夠將其封裝在一個函數中,接受幾個參數並重用它。

至於你的第二個問題:你應該能夠使用merge-base來確定共同的祖先,並使用它來合併或挑選提交(回想一下有一個函數可以爲你工作) 。