2017-04-30 81 views
2

我的公司的政策是任何請求必須使用重新設計的分支機構完成。我有一個當地的Dev分支,這有「任務」分支:重新建立一個擁有子分支機構的分支機構

remote master -------- 
    \ 
    Dev ------------------ 
      \-----task1 \ 
          \---task2 

當主得到更新,我重訂開發的主。什麼是管理分支task1和task2的最佳方式。他們仍在努力。重新配置每個任務分支似乎是我能看到的唯一方式。

+0

是的。除非你挑選而不是合併,但是這並不能很好地處理pull請求。 –

回答

3

嘗試先做重訂開發,同時保留合併:

git checkout Dev 
git rebase --preserve-merges master 

那應該保持TASK1和2正確地重訂爲好。

請參閱「What exactly does git's 「rebase --preserve-merges」 do (and why?)

+0

這是因爲我已經將taskN分支定期合併到Dev中,所以只要Dev使用--preserve-merges重新組合,taskN合併仍然會被記錄下來。有點像應用@Bert F方法? –

+0

@ Josef.B不需要:只需rebase -p主人就足夠了。我沒有看到伯特的回答(當時,我是唯一的答案) – VonC

+0

我們必須以不同的方式閱讀圖形 - 從左到右和從右到左。我將task1和task2看作是從Dev提交分支的2個分支的提示,這是從遠程主分支的,即3個發散頭 - Dev,task1,task2 - 尚未合併在一起。我想你已經看到task1和task2分支已經合併到Dev中,即1個頭部和其歷史中的其他2個分支。如果是後者,那麼我同意 - 保留合併就足夠了。如果是前者,那麼簡單地將Dev分配給自己是不夠的。 –

3

如果你有很多的任務分支,那麼我能想到的最好的是臨時章魚合併他們開發成一個臨時分支,然後重訂臨時到主用--preserve -merges。然後重設分支標籤到適當的地方。

$ git checkout -b temp Dev && git merge task1 task2 
$ git rebase master --preserve-merges 
$ git checkout Dev && git reset --hard temp^ 
$ git checkout task1 && git reset --hard temp^2 
$ git checkout task2 && git reset --hard temp^3 
$ git branch -D temp 

它仍然是一個很大的命令,但:

  1. 由於樹本身保留,這樣可以節省您不必不必嫁接每個手動重建圖形,即更少的人爲錯誤任務分支到已重新設計的Dev分支的適當的相應提交上。這只是將Dev和任務分支標記重置到正確的父提交上,這與它們在章魚合併中使用/命名的順序相對應。

  2. 如果你必須做很多這樣的事情,這應該是簡單的腳本和用作別名。

+1

如果只有兩個分支涉及到,我想說明您希望合併使用--no-ff是否正確?我做到了這一點,並沒有HEAD^2,而我本來預料會是HEAD^2的,可能是因爲合併做了ff。 – RoboCop87

+1

@ RoboCop87 - 同意 - 合併將在可能的情況下快速前進(如果有2個分支,即Dev和task1,則可能會進行合併),因此使用--no-ff來確保所需的合併行爲是必要的。 –