0

如果一個文件的歷史記錄包含具有「有趣」衝突解決方案的合併提交,則git log將跳過它。爲什麼是這樣,我怎麼能把這個提交包含進去?爲什麼限制路徑的'git log'忽略合併提交和有趣的衝突解決方案?

(通過「有趣」,我指的是分辨率不只是把版本從HEADMERGE_HEAD逐字。)

例如,在this sample repository,我已經準備了一個簡單的歷史,說明該問題:

$ git log --oneline --graph 
* 4a69f452 add -stuff at C and G 
* 9fc8e8bf resolve E-alpha + E-beta as E-gamma 
|\ 
| * 95bc62e9 add -beta suffix on lines E and J 
* | 465abd9e add -alpha suffix on lines A and E 
|/ 
* f43dc68c initial ten-line A..J file 

這次合併提交解決通過引入E線的全新版本衝突:

$ git show 9fc8e8bf -U0 | grep -A100 ^@@ 
@@@ -5,1 -5,1 +5,1 @@@ 
- E-alpha 
-E-beta 
++E-gamma 

但是,git log完全掩蓋了這一點。它列出了提交無法解釋在test.txtE線的當前狀態:

$ git log --oneline 4a69f452 test.txt 
4a69f452 add -stuff at C and G 
95bc62e9 add -beta suffix on lines E and J 
465abd9e add -alpha suffix on lines A and E 
f43dc68c initial ten-line A..J file 

是否有一個選項,我可以給你git log,這將使它包括合併提交?

其他命令,如git blame,不表明E線是最後一個接觸的9fc...合併提交:

$ git blame -L5,5 4a69f452 test.txt 
9fc8e8bf9 (Matt McHenry 2016-12-28 16:55:10 -0500 5) E-gamma 

(注:以上輸出由Git版本2.11.0生產。)

+0

您正在使用哪個版本的Git的?使用2.7.4,'git的日誌--oneline 4a69f452 test.txt'顯示'9fc'提交給我。 –

+1

加上' --cc和'git log'會查看組合diff並且應該找到改變,我不確定爲什麼默認選項是這樣的(它們似乎在一個Git版本中有所不同,當我嘗試你的例子,從你的GitHub鏈接克隆,在2.10.1中,我看到'9fc' commit。) – torek

+0

@torek你是對的,' - cc'確實使它提交了這個提交。它被列在手冊頁的「差異格式」部分中使它聽起來好像它應該*不*影響包含在日誌中的提交! 即使在'2.10.1'中沒有'--cc',你是否得到合併提交? –

回答

0

如果將log.follow配置選項設置爲true,或者等價地將--follow傳遞給log命令,則會發生這種情況。

此選項的文檔說它「在非線性歷史記錄上運行不正常」。我想這就是他們的意思。 :(

$ git log --oneline 4a69f452 -- test.txt 
4a69f45 add -stuff at C and G 
9fc8e8b resolve E-alpha + E-beta as E-gamma 
95bc62e add -beta suffix on lines E and J 
465abd9 add -alpha suffix on lines A and E 
f43dc68 initial ten-line A..J file 

$ git log --oneline 4a69f452 --follow -- test.txt 
4a69f45 add -stuff at C and G 
95bc62e add -beta suffix on lines E and J 
465abd9 add -alpha suffix on lines A and E 
f43dc68 initial ten-line A..J file