2016-07-27 93 views
5

我只想知道,如果有任何方法解決兩個git分支的合併提交,而不實際合併它們。git:解決合併衝突而不執行合併

假設,我有一個分支「featureMy」;我的同事創建了另一個分支「featureHis」。兩個分支都在「主」分支上創建。

我的同事隨後爲他的分支「featureHis」創建了一個合併請求到master中。然後,當我將「featureMy」的合併請求創建到master中時,我想確保在「featureHis」合併後它不會與master發生衝突。

通常,我會在之前將「featureHis」合併到「featureMy」中。但是,這並不令人滿意,因爲我有一個額外的合併提交作爲「噪音」,我的合併請求將包含來自「featureHis」的更改。

有沒有辦法,這樣我就可以解決合併衝突,而無需創建合併提交?

親切的問候

+0

如果您想查看是否會有衝突,您可以執行'--no-commit'。 http://stackoverflow.com/a/501461/3000179 –

回答

5

一種標準的方式,以避免合併提交到位合併的使用墊底。考慮以下情形:

master:  A 
featureMy: A -- B 
featureHis: A -- C 

假設只有這兩個分支都是從現存master,那麼你們中的一個將與master首先合併。假設你的同事先到達那裏。隨後,圖是這樣的:

master:  A -- C 
featureMy: A -- B 
featureHis: A -- C 

你的同事的承諾現在是在master分支。現在,如果您使用基於合併的工作流程,則首先將master合併到您的分支中,然後將分支合併到master。這將導致:

master:  A -- C -- E 
featureMy: A -- B -- D 
featureHis: A -- C 

現在你的分支master分支都有醜陋的合併在他們提交。但是,如果你有重建基礎上master您的分支,你會留下:

master:  A -- C 
featureMy: A -- C -- B' (B' indicates that this a new commit, not B) 
featureHis: A -- C 

現在你的分支featureMy實際上是master分支提前。您可以直接在master之上直接推送您的提交,而不會發生衝突。這將導致如下圖所示:

master:  A -- C -- B' 
featureMy: A -- C -- B' 
featureHis: A -- C 

注意到有沒有合併提交的任何地方。實際上,您的featureMy分支和master都有相同的線性歷史記錄。

萬歲git rebase

+0

我會補充說,爲了遵循他目前的工作流程,他應該首先將分支'featureMy'重新分配到'featureHis'並解決所有衝突。在分支'featureHis'合併到'master'後,他可以將'featureMy'重定位到'master'併合併到'master'。 – geoji