2015-11-06 93 views
1

當我想要檢索的一個分支與主的變化:混帳拉--rebase:自動合併衝突文件

git pull --rebase 

和修飾對主已經完成對我在修改的文件我分支,自動合併在這個文件上完成。 生成的文件是主修改和分支修改的混合。

爲什麼我沒有一個帶有衝突標記區域的文件?

編輯 這是我遇到的問題描述,這是我的問題的由來。 在分支B上,我有一個實現接口IC的C類。我在本地爲C添加了一個方法。同一分支上的另一個人推送了一些修改。其中一個修改是:向IC添加一個方法並向C添加一個方法實現。這個方法是我之前添加在我身邊的方法。 拉出之後,Git自動合併了文件C和2個方法,並在類C中存在相同的簽名。 這就是爲什麼我想禁止自動合併的原因。

+1

http://stackoverflow.com/questions/5074452/git-how-to-force-merge-conflict-and-manual-merge-on-selected-file –

回答

0

沒有得到這樣的文件的原因是因爲沒有衝突。如果沒有衝突,一切都可以乾淨地合併。如果發生了一些衝突,git會提醒你,然後讓你啓動一個合併工具或讓你修改衝突線manualy

編輯 如果你想git的強制通知你它合併的文件(即到強制衝突),您應該製作一個自定義合併驅動程序,請參閱Git - how to force merge conflict and manual merge on selected file

編輯 至於你的話: 在「拉分支」,有兩個變化WRT主:

  1. 在行X
  2. 的代碼添加一個代碼塊刪除塊在行Y.

預期的行爲是,如果X行的代碼塊在master中保持不變,合併兩個更改後發生:remo ve在X代碼塊並添加代碼塊在Y.

這正是git所做的!如果你將這樣一個分支合併到master中,之後該方法只會在文件中出現一次,即在你將它移動到的地方

它可能出錯的地方:如果你有兩個分支:A和B.您將方法移動到Y1行,在B中您將同一方法移動到行Y2。 Git認爲:兩個分支共享「刪除」,這裏沒有衝突。除了加法之外沒有衝突(因爲Y1和Y2相距很遠)...

但是,您描述的用例(方法僅在一個分支中移動)不會產生任何問題。

+0

我不明白爲什麼沒有衝突。在我的情況下,2人改變了相同的文件,所以只有我可以實現合併。自動合併在這裏沒有意義。 – Ekans

+0

如果它們在此文件中更改不同的行,則可能不會有衝突。例如,如果我將文件的第一行更改爲「a」,並將該文件的最後一行更改爲「b」,則自動合併將採用原始文件,並將第一行和最後一行更改爲「a」,分別爲「b」 – BartBog

+0

好吧我理解衝突是否在行級管理。那麼我可以在文件級別擁有「衝突管理員」嗎?更一般地說,我如何在我的用例中發生衝突? – Ekans