2012-01-27 96 views
2

我有一個關於git分支協議的問題。我開始更熟悉git命令,但對於這個過程還是比較新的。git流分支依賴關係

我正在與另外一個人基於Git的項目。我們添加了一個大功能,因此我們將工作分解爲「Branch_1」。另一位開發人員開始在Branch_1的一個叫做Branch_2的分支中添加一些添加項。另一個開發人員在Branch_2上做了一些工作,然後暫時執行其他任務。我需要繼續並擴展他在Branch_2中所做的更改,因此我基於Branch_2創建了Branch_3。

圖1

Branch_1 
    |_______> Branch_2 (other developer working on) 
       |________> Branch_3 (I'm working on) 

雖然我工作Branch_3,我認識到,需要在所有分支的部分bug修復,我需要修復才能繼續發展Branch_3。 (另外,如果Branch_3工作被放棄,則無論如何FIX都需要位於所有其他分支中)。

所以我的想法是檢出Branch_1,使爲FIX,結賬Branch_2的變化,在Branch_1合併,然後結帳Branch_3並從Branch_2的修改合併。見下面的圖2。

圖2

git checkout Branch_1 
# make my changes 
git pull origin Branch_1 # to pull in any other changes 
git push origin Branch_1 

git checkout Branch_2 
git pull origin Branch_2 # to pull in any other changes 
git merge --no-ff Branch_1 # merge in branch 1 
git push origin Branch_2 # push to the remote repository 

git checkout Branch_3 
git pull origin Branch_3 # to pull in any other changes 
git merge --no-ff Branch_2 # merge in branch 2 
git push origin Brach_3  # push to the remote repository 

不過,我想知道幾件事情在這種情況下:

  1. 有很多的步驟做。在一段時間後消耗時間。如果我根據Branch_3創建Branch_4並從Branch_4創建Branch_5,則涉及更多步驟。
  2. 爲了着手製作FIX後Branch_3工作,我基本上已經做出提交到我同事的Branch_2他可能沒有意識到。
  3. 對於更復雜的設置,我可能無法改變從什麼分支的東西。我可以將我的bug修復爲Branch_1,並將其合併到我的同事Branch_2中,但也許我的同事通過分支Branch_1a等中間分支創建了Branch_2。 FIX不會以正確的順序正確合併到Branch_1a中。

我主要wondeirng別人怎麼會接近類似的情況。這是一個正確的思維模式,需要在分支層次結構中進行變更嗎?

+1

另請參閱http://stackoverflow.com/questions/6596030/whats-your-ideal-branch-architecture-within-git-for-web-applications及其答案 – 2012-01-27 08:27:03

回答

2

不幸的是,是的。如果您想要將修補程序集成到所有分支機構中,則必須先創建一次並將其合併到任意位置,或多次修復修補程序(由cherry-pick支持)。當擔心branch2並且你提交了你的同事沒有意識到的提交時,只需省略branch2即可。當你的同事最終將它合併回branch1(這應該是期望的結果,因爲與分支機構成功合作的祕密實際上是再次合併),修復程序將自動合併。如果他迫切需要修復,你可以簡單地通知他,他可以自己合併。

+0

謝謝Bombe。很高興知道我不必將Branch_1合併到Branch_2中,也可以將它合併到我自己的Branch_3中。 – 2012-01-27 18:32:23

+0

請注意,如果您習慣將分支2合併到分支1中,那麼如果分支3中的提交已經直接合併到分支1中,您將*合併衝突! – 2012-01-29 13:33:12