2014-12-10 92 views
0

我們有一個2分支回購。一個名爲dev,另一個名稱爲prd。我們按照正常流程發送來自我們福克斯的請求,將我們的更改與dev合併。之後,從devprd進行拉取請求併合並,以使這些更新成爲現場。Github分支總是在前面或後面

的問題是在一個點而合併來自devprd,所述prd分支永久成爲「前方」的dev(有時提交提前疊加)。如果我們試圖將prd合併回dev,會發生相反的效果,除非它會落後。

我們怎樣才能讓兩個分支重新同步,因爲這些狀態導致團隊混淆。

注意:它在前面沒有文件更改,只有提交正在被記錄。

+1

'git log --oneline --left-right dev ... prd'的輸出是什麼? (提示:它應該爲您提供一個分支上的所有提交列表,但不包括另一個分支上的提交列表)。 – 2014-12-10 23:59:00

回答

3

由於合併Git的工作方式,這是正常的行爲。

在Git中,合併與其他任何提交一樣,它只有兩個(或更多)父項。它包含合併內容所需的更改。當您將一個分支合併到另一個時,源分支不會更改。所以當dev被合併爲prod時,只有prod會改變。

下面是一個視覺示例。假設dev在第3次提交時分支產品。prod現在是第7次提交,dev是E.檢出。

1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 [prod] [HEAD] 
      \ 
      A -- B -- C -- D -- E [dev] 

當dev與命令git merge dev合併爲prod時,這就是結果。

1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 [prod] [HEAD] 
      \     /
      A -- B -- C -- D -- E [dev] 

在新的合併結果提交父母均爲7和E.它包含了所有必要的修改,以把它們合併起來。 prod被推進到這個新的提交。 dev仍然在E.

這就是爲什麼prod總是會在合併之後領先dev的原因。例外是「快進」。假設發生這種情況。

1 -- 2 -- 3 -- 4 [prod] [HEAD] 
       \ 
       A -- B -- C [dev] 

dev在產品4處分支出去。已經完成了關於dev但不是產品的工作。 prod被檢出。當git merge dev完成後,git會識別出不需要合併,並執行「快進」。

1 -- 2 -- 3 -- 4 
       \ 
       A -- B -- C [dev] [prod] [HEAD] 

prod被推進到C,dev是同一個地方。您可以使用git merge --no-ff替代「沒有快進」的行爲。這被推薦用於特性分支,其中保留了一組提交都是一個內聚特性的一部分的事實是重要的,但如果你只是讓生產分支趕上開發,那麼這是不必要的。

事實上,你的合併不是快進表明提交直接提交到產品,在我們的例子中是提交4 - 7。在許多工作流程中,這不應該發生,提交只應該開發,然後合併爲產品。你應該調查一下,可能會有變化,但不在開發中。有人可能熱補丁產品。

解決這種情況的最簡單方法是將dev合併爲prod,然後立即刪除dev並將其再次關閉prod。別擔心,分支歷史將被保留。

1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 [prod] [dev] [HEAD] 
      \     /
      A -- B -- C -- D -- E 

git branch -d dev將阻止您刪除尚未完全合併的分支。例如,如果存儲庫這個樣子......

1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 [prod] [HEAD] 
      \     /
      A -- B -- C -- D -- E -- F -- G [dev] 

你跑git branch -d dev,混帳將拒絕刪除該分支。 不要使用-D或-f強制它否則你將失去開發工作。只需將dev合併到prod中,然後再試一次。

還有其他方法可以處理這種情況,但這是最簡單的。之後,你的提交應該快進。

+0

假設提交直接發送到'prd',不會將'prd'合併回'dev'同步兩個分支? – Apocist 2014-12-12 00:45:51

+0

@Apocist否,出於同樣的原因將開發合併爲prod不會同步它們。源分支不會在合併中移動,只有檢出分支會執行。我已經更新了我的建議,以瞭解如何解決這種情況。長話短說,重新開始推銷。 – Schwern 2014-12-12 03:10:11

+0

@Schwerm謝謝!這工作,我們會盡力確保這不會再次脫軌 – Apocist 2014-12-12 22:29:58