我開始在branchB上工作。這是從branchA分支出來的。幾周後,主線分支開發了許多合併的提交。分支A和B都落後了。分支分支,如何在另一分支進行分配?
--d1--d2--d3 ...2 weeks later... --d253 develop
\
a1--a2--a3 branchA
\
b1--b2--b3 branchB (current)
我想跟上開發分支。而且更願意在最新的提交d253中重建我的分支B.並且所有來自branchA的提交應忽略。這將避免我解決合併衝突的巨大努力(有很多)。因爲我不是那個分支的維護者。我可以在分支B中重新創建我需要的依賴關係。不知道是否應該在重新綁定之前或之後執行此操作。
--d1--d2--d3 ..... --d253 develop
\ \
a1--a2--a3 \
\
b1'--b2'--b3'
Q1。它是正確的做
git checkout develop
git pull
git checkout branchB
git rebase --onto develop branchA
Q2。讓我們假設衝突的數量是相當重要的,大約30個文件。與git merge develop
相比,rebase仍然是一個好方法嗎?
branchB尚未與其他開發者共享。你能解釋一下「如果分支b與分支a正交」的含義嗎?至於「一個原因,我不想將兩個分支重新分配到當前的提交?」這是B/C我不保持branchA。事實證明,這是一個緩慢移動的分支,它將被合併到主線的那一天遠非如此。我的分支B更加活躍,我需要從A中獲得的少量依賴可以從A中挑選出來,或者我甚至可以重新創建一些存根來讓我的代碼工作,同時等待branchA在未來合併。希望這是rebase的一個很好的理由。 – Polymerase
'rebase' vs'merge'當'rebase'正在追趕長連鎖提交時,我注意到了一個區別。當rebase在目標分支的歷史記錄上重播這個文件時,文件可能有5個衝突。並要求衝突解決5次。通過合併,有一個最終合併衝突步驟,其中所有文件都顯示在一個屏幕中(我使用IntelliJ)。每個衝突的文件只需要解決一次。這樣說,這並不意味着「合併」更好。我非常喜歡將我的更改放在目標頂部而不是合併提交。只是想更好地瞭解最佳做法。 – Polymerase
「正交」我的意思是如果你的改變可能是獨立於'a'的基礎開發線,反之亦然。而從你所說的情況來看並非如此。如果你決定繼續(例如通過從'a'中挑選你需要的東西),它可能會導致更多的合併衝突;所以你必須決定這是否值得。 –