Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么路径受限';git日志';是否忽略具有有趣冲突解决方案的合并提交?_Git_Merge_Git Log_Merge Conflict Resolution_Git Merge Conflict - Fatal编程技术网

为什么路径受限';git日志';是否忽略具有有趣冲突解决方案的合并提交?

为什么路径受限';git日志';是否忽略具有有趣冲突解决方案的合并提交?,git,merge,git-log,merge-conflict-resolution,git-merge-conflict,Git,Merge,Git Log,Merge Conflict Resolution,Git Merge Conflict,如果一个文件的历史记录包含一个合并提交和一个“有趣的”冲突解决方案,git log将跳过它。为什么会这样?我如何才能将该承诺包括在内 (所谓“有趣”,我指的是一种解决方案,它不仅仅是从HEAD或MERGE\u HEAD一字不差地获取版本。) 例如,在中,我准备了一个简单的历史记录来说明问题: $ git log --oneline --graph * 4a69f452 add -stuff at C and G * 9fc8e8bf resolve E-alpha + E-beta as

如果一个文件的历史记录包含一个合并提交和一个“有趣的”冲突解决方案,
git log
将跳过它。为什么会这样?我如何才能将该承诺包括在内

(所谓“有趣”,我指的是一种解决方案,它不仅仅是从
HEAD
MERGE\u 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
完全掩盖了这一点。它列出的提交无法解释
test.txt
E
行的当前状态:

$ 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日志包含合并提交

其他命令,如
git-burn
,确实显示上次在
9fc…
合并提交中触摸了
E
行:

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

(注意:上述输出是由git版本
2.11.0
生成的)

如果您将
日志设置为
true
或将
--follow
传递到log命令,则会发生这种情况

该选项的文档称其“在非线性历史上不起作用”。我想这就是他们的意思(



您使用的是哪个版本的Git?使用2.7.4,
Git log--oneline 4a69f452 test.txt
为我显示了
9fc
提交。添加
--cc
Git log
将查看组合的差异,并应找到更改。我不确定为什么默认选项是这样。(在不同的Git版本之间,它们似乎有点不同,当我在2.10.1中尝试从GitHub链接克隆的您的示例时,我看到了
9fc
commit。)@torek您是对的,
--cc
确实让它选择了提交。尽管它被列在“差异格式”中手册页的一部分,听起来似乎不应该影响日志中包含的提交!您是否在
2.10.1
中获得了合并提交,即使没有
--cc
?我确实在2.10.1中看到了提交,没有
--cc
。(我必须显式地
git签出
something-我想这是
gamma
-首先,这样git才能找到文件。)顺便说一句,看看-看起来好像在2.6.0之前,你必须使用显式的
-m
。我也不确定为什么我自己没有
--cc
看到它,因为没有各种选项之一,git就有这个功能“忽略合并”标志集。啊,
-m
也会让合并提交出现在我的面前。这些选项出现在手册页的“差异格式”部分,这真是误导人……我说过了吗?:)
$ 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