2011-05-02 113 views
6

當我運行此命令:爲什麼會出現這種合併產生衝突

git log HEAD..other_branch -- some_file.txt 

有沒有輸出,我認爲meants,有在other_branch沒有改變some_file.txt。然而,當我運行git merge other_branch我得到的衝突整體轉換在some_file.txt.

當我運行:

git log HEAD...other_branch -- some_file.txt 

我得到兩次提交。其中一個文件被修改,另一個修改後的分支被合併到HEAD.

我假定因爲文件只在一個分支中更改,所以不會有任何衝突。爲什麼會有衝突?有沒有辦法在運行git merge之前查看會發生什麼衝突(以及爲什麼)?

回答

4

要添加到manojlds的貢獻:

非常好。但是,下面應該完成相同的?

git diff master:some_file.txt someBranch:some_file.txt 

這樣你就不需要對版本比較緩存


原來的答覆之前,退房:

命令

git log HEAD..other_branch -- some_file.txt 

是相同的

git log ^HEAD other_branch -- some_file.txt 

這意味着給我從other_branch可達的所有提交日誌,但不能從HEAD for some_file.txt到達。如果這個命令沒有輸出,這意味着some_file.txt在other_branch上根本沒有改變。

在另一方面:

git log HEAD...other_branch -- some_file.txt 

是HEAD和other_branch之間的對稱差,即在頭和other_branch但不是在兩者,都將被合併,你當提交的提交合並這兩個分支。因此,一些可能已經發生some_file.txt頭部,導致與other_branch

+0

謝謝。我想我很困惑(顯然),爲什麼只有在HEAD中發生的變化會在other_branch中合併時產生衝突。 other_branch沒有任何變化,所以不應該有一個地方在兩個分支發生改變發生產品衝突。 – 2011-05-02 22:37:48

+0

如果添加-p,日誌會說明什麼?合併衝突是什麼樣的? – ralphtheninja 2011-05-02 22:52:17

1

的版本衝突增加@Magnus Skog的答案,你的問題:

我以爲,因爲該文件是 只在一個分支改變,那裏 不會有任何衝突。爲什麼 存在衝突?有沒有辦法看到 什麼會衝突(以及爲什麼)之前我 運行git merge?

在這種情況下,我主要是做:

git checkout other_branch some_file.txt 

然後做

git diff --cached some_file.txt 

看到比較和你可以很容易地看到,如果你得到合併衝突。如果您還想單獨「合併」文件,現在可以使用git commit

這是我在某些文件中發現差異併合並特定文件時所採用的方法

+0

+1很酷。看到我編輯的答案。乾杯 – ralphtheninja 2011-05-02 22:58:43

相關問題