我的團隊正在研究git中的共享主題分支,我將稱其爲「topic1」。我正在研究一個由topic1構成的分支上的一些代碼的重構,我將稱之爲「重構」。我一直在定期將topic1合併到重構中,以便能夠隨時更新變化,但是尚未將重構合併回topic1,因爲重構仍在進行中。將基於主題分支的分支的更改合併到git中的其他主題分支
還有一個主題分支,我將其稱爲「topic2」,它最近由主人創建。我想要做的只是合併我對「重構」所做的更改由topic2創建的新分支,我將其稱爲「topic2_refactor」。 (IE的變化只能通過重構訪問,但不TOPIC1的提交。)
我知道怎麼看這些只是這些變化:
git log origin/refactor --not origin/topic1
所以我想要做的是這樣的 - 但是這個語法是不正確的:
git checkout topic2
git checkout -b topic2_refactor
然後將此:
git merge origin/refactor --not origin/topic1
還是這個:
git cherry-pick origin/refactor --not origin/topic1
(以上似乎導致合併不屬於neccessary,由於一些變化,這在發生主,後來合併到重構分支衝突。)
我希望有是一個乾淨的方法,可以避免在「重構」分支歷史中稍後解決的不必要的合併衝突。這可能使用git rebase,git filter-branch等嗎?
您的最後一段是一些最好的建議。始終從您打算合併到其中的所有東西的共同祖先開始分支。 – Cascabel 2011-04-21 20:31:05
謝謝,我會在當地的一家分店嘗試。重構分支由topic1構成的原因在於,它是topic1中引入的代碼的實驗重構,在創建分支時還沒有合併到master中(topic1已經合併到master中,但它的意圖更多作爲一個長期發展的分支,所以它的歷史再次與主人分離。) – Eliot 2011-04-21 20:55:50
'git rebase --onto topic2 origin/topic1'似乎沒有效果。 在我諮詢了我的git書之後,我嘗試了'git rebase --onto new_refactor origin/topic1 origin/refactor'這看起來會產生相同的合併衝突,當我嘗試在我的問題中使用cherry-pick命令初始合併更改時,我已經在歷史中進一步手動解決了衝突。 :( – Eliot 2011-04-21 21:05:03