2013-09-25 42 views
2

說我有一個主機和一個發展分支 - 開發有很多承諾是高手並不爲簡單起見:Git的 - 從具體的合併犯起

Develop: 

Commit 1 
Commit 2 
Commit 3 
Commit 4 
Commit 5 
Commit 6 

我希望削減從一個新的特性分支掌握沒有任何這些承諾在開發。

但棘手的部分是,我想合併開發成我的功能從提交3起。

我可以選櫻桃,但實際上比我簡單的例子有很多,更多的承諾。

如何才能做到這一點?

回答

2

你能摘櫻桃:

git checkout -b newfeature master 
git cherry-pick commit2..develop 

如果語法不直接支持,在那裏,使用:

git cherry-pick $(git rev-list commit2..develop) 

注:先在a..b範圍標識提交不包括在修訂清單中,謝謝Carl

O無論如何,它看起來像是rebase --root ... --onto的情況。我總是在手冊頁中查找具體內容。

0

如果承諾3-6不依賴於承諾1-2,您可以克隆的分支,然後使用交互式衍合到開發分支分成兩個分支,從而使歷史看起來像:

develop1: master commit1 commit2 develop2:master commit3 commit4 commit5 commit6

然後,您可以合併使用合併中的兩個不同分支。否則,您將不得不使用櫻桃採摘作爲其他答案說。這會起作用,但你會失去分支關係的歷史。

一般而言,爲您正在處理的每個特定主題創建一個新的分支是有意義的,更多的是在細節方面。當地的分支機構很便宜,甚至遠程分支機構也不是那麼糟糕。如果你把東西放在不同的分支上,組織你的思路會容易得多。它還鼓勵您以一種方式工作,即儘可能將問題分爲獨立的模塊化部分,這將鼓勵更好的系統設計,提高可測試性等。