2015-11-04 51 views
2

自動合併當「混帳拉」後,你會得到消息:查看文件由混帳

Merge made by the 'recursive' strategy. 

你怎麼能知道哪些人在衝突中的文件?我希望能夠確認如何更改我的文件所做的git ...

+0

該信息不會被記錄在任何地方。但是,您可以檢出舊的提交併重新進行合併,以查看哪些文件會發生衝突。 – Nayuki

+0

我提高了這個問題,因爲你的用戶名太棒了。 –

回答

1

小心單詞「衝突」:如果git merge步驟git pull自動完成,或者有沒有任何衝突 ,或者你有git rerere打開,並且git re使用re有線re解決衝突的解決方案。我嫌疑人你的意思是「我如何看到git從合併的origin/branch部分帶來什麼變化」。

也就是說,假設在git pullgit fetch步驟之後提交圖表看起來像這樣。這裏每一個字母代表一個承諾,我已經假設你自從上次你和你的上游是在同步做兩次提交(AB),和他們做了兩次提交(CD):

   A - B <-- branch 
      /
... - o - o 
      \ 
       C - D <-- origin/branch 

此時您的git pull完成了其後半部分git merge,以產生新的合併提交。讓我們把這種M

   A - B 
      /  \ 
... - o - o   M <-- branch 
      \  /
       C - D <-- origin/branch 

想必你知道你做什麼樣的變化,你希望看到什麼樣的變化M了,當B(最近的更改)進行比較。

爲了找到答案,您首先找到提交B的SHA-1 ID,然後您可以簡單地運行git diff <id-of-B> branch。 (名字branch認定犯M容易,所以它的B,你需要找到,問git的這種差異。)

實際上,有找到B的ID的簡單方法。 B始終是M的「第一位父母」。像M這樣的合併提交至少有兩個父提交,並且第一個在您(或git pull)運行git merge <whatever>之前,一個是您的分支的小費。 (第二父提交D這裏,因爲這是你合併-in。)的有Git中一個特殊的語法參照第一父母,實際上是兩個這樣的語法,但允許使用^語法現在:

$ git diff branch^ branch 

名稱branch標識了一個特定的提交,即M。每個^在之後加上,標識特定提交的東西意味着「現在轉到該東西的第一個父代」,因此branch^標識提交B。如果您想查找提交A,請添加另一個^以獲取branch^^。要找到最右邊的o提交,您可以編寫branch^^^,依此類推。

您可以多壓縮一下這個表示法:branch~3表示branch^^^,即三個後綴^ s; branch~5表示branch^^^^^等等。

如果你想找到的M母公司,即犯上面的圖中D?您可以在^之後添加一個數字,以表示,其中父級:branch^2是提交D。 (如果你問branch^3你得到一個錯誤的承諾M只有兩個家長,而不是三個。梅傑斯可以有兩個以上的父母承諾,但這些都是不尋常的。)

如果你想找到犯C,您可以先使用branch^2找到D,然後再添加^branch^2^標識提交C。由於C的父代是最右邊的o提交,因此branch^2^^標識提交o,就像branch^^^branch~3一樣。

(可以使用git rev-parse,看到這一切,可打印出任何的git對象的全部40個字符的SHA-1 ID鑑於解析爲對象的名稱。只要運行git rev-parse <name>,這是一個只讀的操作,所以你可以在一個窗口中使用它,例如在另一個窗口中查看圖形。另外,請看the gitrevisions documentation。)