git show --name-status letters:什么时候可以出现多个字母?

时间:2014-10-08 16:00:07

标签: git

关于git的快速提问,特别是使用

时出现的--diff-filter字母

git show <rev> --name-status --oneline

我注意到在某些文件中,我得到的结果如下:

  

AM contrib / platform / src / com / sun / jna / platform / win32 / WinUser.java

如何添加和修改此文件? 我也得到如下结果:

  

MM CHANGES.md

这可能是由修改后的提交引起的吗? 还有其他可能的原因吗?

由于

1 个答案:

答案 0 :(得分:3)

git show命令可以显示合并提交以及非合并提交。您正在显示合并。

当您要求git show显示合并提交时,它会使用&#34;组合差异&#34;默认情况下。例如,这里是git源本身提交的一部分(部分)。我在这里使用了HEAD^,因为这个特定的合并提交碰巧有正确的变化来产生一个有趣的结果。我将首先举例说明,然后解释发生了什么。

$ git show HEAD^
commit 4109c28e055dba27d73cefb956bea5e611f66ec0
Merge: a3d54f9 e09867f
Author: Junio C Hamano <gitster@pobox.com>
Date:   Tue Aug 26 11:16:26 2014 -0700

    Merge branch 'jk/diff-tree-t-fix'

让我们添加--name-status --oneline

$ git show --name-status --oneline HEAD^
4109c28 Merge branch 'jk/diff-tree-t-fix'

MM      combine-diff.c
MM      t/t4038-diff-combined.sh

这看起来很像你的,虽然我们只有MM而不是AM

现在让我们添加-m(这会很长,所以我会把它剪掉):

$ git show -m --name-status --oneline HEAD^
4109c28 (from a3d54f9) Merge branch 'jk/diff-tree-t-fix'
M       combine-diff.c
M       t/t4038-diff-combined.sh
4109c28 (from e09867f) Merge branch 'jk/diff-tree-t-fix'
M       .gitignore
M       .mailmap
[...]
M       column.c
M       combine-diff.c
M       command-list.txt
[...]

-m的输出最容易解释。合并提交是一个包含两个或多个父项的提交,-m命令显示对每个父项的提交差异:

git show

这里合并提交... - A - M / ... - B (在git源的情况下为M,这里)将commit 4109c28A)作为其第一个父项,并{{1 } {(a3d54f9)作为第二个。将B的内容与e09867f进行比较,我们发现文件AM已被修改。将combine-diff.ct/t4038-diff-combined.sh的内容进行比较,我们发现许多文件已被修改,包括B(并且在输出中我剪掉了M也是)。

当git显示&#34;组合差异&#34;时,它首先过滤掉所有未从两个父母(或#34;所有父母和#34; 3或更多父母合并)。也就是说,它不被认为是有趣的&#34; combined-diff.c已从t/t4038-diff-combined.sh修改为column.c,因为B修改为M。但A 在两个不同的差异中都被更改,因此它会保留在组合差异中。

如果添加M,只需保留与过滤器匹配的那些差异,即可进一步减少差异。

在任何情况下,合并差异&#34;状态&#34;部分显示为一系列状态,每个父母一个。这里的序列combined-diff.c表示在merge和first-parent之间添加了文件,而在merge和second-parent之间,文件被修改了。您还可以获得--diff-filter(如上例所示),AM(从第一个父级修改,从第二个添加),MMMA,依此类推。我公平地,但不完全,确定你不会看到重命名和副本(文档说没有得分号,只显示一条路径,这将是重命名和复制的问题)。在每种情况下,每个字母都有其通常的含义。你在这里看到的是任何一个空格作为修改状态字母之一的情况,因为这意味着&#34;没有变化&#34;因为&#34;没有改变某些家长&#34;从组合的差异中被丢弃。

有关组合差异的更多信息,请参阅&#34;组合DIFF格式&#34;部分,例如the git diff-tree documentation