0

如果文件的历史记录包含具有“有趣”冲突解决方案的合并提交,git log则将跳过它。为什么会这样,我怎样才能包含该提交?

(通过“有趣”,我的意思是一个不只是从HEADMERGE_HEAD逐字获取版本的决议。)

例如,在这个示例存储库中,我准备了一个简单的历史来说明问题:

$ 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完全掩盖了这一点。它列出的提交无法解释以下E行的当前状态test.txt

$ 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 version 生成2.11.0。)

4

1 回答 1

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
于 2017-01-03T01:54:20.313 回答