2009-09-17 180 views
34

因此,我的項目中有一個維護分支和一個主分支。如果我讓在維護分支提交,並希望向前將其合併到主分支,這很簡單:如何在git中恢復提交?

git checkout master; git merge maintenance 

但是,如果我想繞走另一條路,即應用提交由掌握回我的維修部門,我該怎麼做?這是否被認爲是櫻桃採摘?如果我再次將維護分支合併,會導致問題或衝突嗎?

回答

30

這也正是用例git-cherry-pick

git checkout maintenance 
git cherry-pick <commit from master> 
+0

斷開的鏈接。你有新的參考嗎?謝謝 – glarrain

+1

2012年6月16日,我成功檢索了該鏈接。 – mwalling

+0

太好了,它回來了。也許這只是暫時的。謝謝@mwalling – glarrain

0

是的,它被認爲是挑肥揀瘦,不,一般它不應該帶來問題。如果提交不適用於清理時,你可能會面臨完全相同的衝突時,櫻桃採摘回來。

0

作爲一般規則,我使用合併移動變化「上」樹(從維護主)和重訂將其移至「下」樹(由主到維護)。這是爲了維護主分支中的提交順序。

基本上衍合回滾您對當前分支叉(或上次rebase)所有的變化,在新的變化副本,然後再應用更改。

如果你不想得到所有變化的主人,那麼你可能需要櫻桃挑選你想要的。

+2

我也想知道* rebase *。但假設_maintenance_分支專門存在_not_沒有所有當前的變化,那麼這不是你想要的。對我來說,重新設計一個開發分支似乎是最好的選擇,但是在master(或任何上游開發分支)中選擇一個bug修復重新進行維護。 –

11

替代解決方案使用「git cherry-pick」(如在其它響應建議)。將創建一個單獨的[主題]分支爲修復關閉維護分支,以及第一合併該分支進入維護分支,然後進入主分支(主幹)。

該工作流(有點)在Resolving conflicts/dependencies between topic branches early博客發佈者JUNIOÇ濱野,GIT中維護者說明。

櫻桃採摘結果重複提交,這可能會導致合併或重新綁定時出現問題。基於主題分支的工作流程只保留一個修復副本。

+0

我喜歡鏈接的帖子如何解釋添加可能衝突的多個提交。將特徵A與Bug修復B合併在一起,然後將它們之一合併到主或維護分支中。這種方式可以確保A和B之間的衝突都解決了,所以,如果你拉A或B第一,那麼你可以很容易地拉A + B的合併之後,知道它是合併前爲您服務。參見[鏈接文檔中的圖3](http://gitster.livejournal.com/27297.html)。 –

0

正如其他人已經指出,櫻桃採摘可能是最好的選擇。我只是想補充說,挑選櫻桃時的衝突通常可以通過檢查你正在挑選的提交的「依賴關係」來解決,並且我已經構建了a tool called git-deps來檢測和可視化這些依賴關係。如果您訪問主頁,您將看到兩個YouTube視頻:第一個給出了該工具的一般介紹,第二個演示瞭如何在採摘時避免衝突。