master分支上的git diff-tree为空

时间:2018-05-24 09:03:30

标签: git

当我跑步时

git diff-tree --no-commit-id --name-only -r HEAD

在分支上返回上次提交时修改的文件名。

但是当我在master分支上运行相同的命令时,它什么都不返回。

阅读

git help diff-tree

尚未澄清此行为。它说该命令比较一个或几个树。如果只指定了一个,则将其与父母进行比较。

主人:

$ git diff-tree --name-only -r HEAD
$ git diff-tree --name-only -r HEAD HEAD^
path/to/modified-file
$

为什么在master上运行此命令什么都不返回?

1 个答案:

答案 0 :(得分:1)

如果当前提交是合并提交(有两个或更多父母),那么:

git diff-tree --name-only -r HEAD

表示:

git diff-tree --name-only -r HEAD HEAD^1 HEAD^2

(如果它是章鱼合并,则添加更多HEAD^number个参数,或者使用特殊的^@表示法一次命名所有父项;上述内容主要用于说明。)

由于这会比较多个树,因此它使用组合差异(或使用--stdin,默认情况下根本不会产生差异)。正如the documentation says

  

请注意,组合差异仅列出从所有父母修改的文件

(强调我的)。如果子(合并)提交的path/to/modified-file版本与父#1中的文件不同,但与父#2中的文件匹配,则不会看到该文件的名称。

请注意,-m标志将拆分合并为多个虚拟提交,每个虚拟提交都有一个父提交,然后列出与该父提交的差异。然而,将此与--no-commit-id相结合意味着更难以确定哪个父项具有哪些与合并提交相关的更改(尽管如果某个文件被列出两次,并且合并提交只有两个父母,你马上就可以告诉父母双方都改变了。)