对于 git diff --name-status,输出的含义是什么?

5
当我运行git diff --name-status时,我会看到这样的行:
MM  mm/Jenkinsfile

'MM' 是什么意思?

mkreiger1的“可能重复”的答案提供了有用的信息,但是像 Koop4的回答一样,它在不引用回答这个特定问题的git文档的情况下提供了信息。

多个字母(如“M”)在哪里被具体描述?“可能重复”的答案解释了“为什么”(感谢那个回答),但是这个在哪里有记录呢?


你正在查看一个合并提交吗? - mkrieger1
1
你的问题是想知道'M'代表什么(相对于'A'之类的),还是想知道为什么会有多个字母? - mkrieger1
在这里需要区分 git status(运行 两个 git diff)和 git diffgit show(运行 一个 git diff)之间的区别,有些特殊情况下是一个合并的差异。 - torek
在diff手册的正文中,有一个名为**DIFF FORMAT FOR MERGES**的章节,它详细说明了diff在合并时所显示的内容。毫不意外地,它会显示每个父版本差异的状态摘要信息。 - jthill
根据我的问题描述,我试图执行一个简单的“git diff --name-status”。 - NoBrassRing
2个回答

6
作为文档所解释的,该选项仅显示更改文件的名称和状态。
简短格式是由两个字母的状态代码跟随路径组成的:XY PATH。
对于存在合并冲突的路径,X和Y显示每个合并方的修改状态。
对于没有合并冲突的路径,X显示索引的状态,Y显示工作树的状态。
对于未跟踪的路径,XY为??。
其他状态代码的含义如下:
' ' = unmodified
M = modified
A = added
D = deleted
R = renamed
C = copied
U = updated but unmerged

您可以在相关章节中阅读更多关于“短格式”状态的内容。 点击这里

OP 想知道 MM 状态约定的含义。我猜这就是 -1 的原因? - Romain Valeri
另外,问题陈述为:“输出的含义是什么?” - Robdll
1
@NoBrassRing,你有没有查看他回答末尾链接的Koop4文档部分?虽然第一个链接(到diff页面)并没有回答那个部分。但他随后编辑添加了第二个链接和扩展解释。 - Romain Valeri
是的,我没有检查第二个链接,它提供了答案。抱歉。 - NoBrassRing
1
回答不错,但它忽略了原始路径的可能性。文档中说:“XY ORIG_PATH -> PATH”。 - AdamS
显示剩余3条评论

1

在 Git 2.30.1(2021年第一季度)中,文档更加清晰:

请参见提交记录4eb56b5(2021年1月10日),作者为brian m. carlson(bk2204
(由Junio C Hamano -- gitster --提交记录644d85e中合并,于2021年1月15日)

文档: 重新表述和澄清git status --short格式

署名:brian m. carlson

git-status(1)中描述瓷器格式的表格很有帮助,但对于一些贡献者来说,三个部分的含义并不完全清晰。

因此,用户无法找到如何在程序中检测常见情况,比如合并冲突。

让我们通过重新表述,更明确地说明表格中每个部分的含义,用通俗易懂的语言告诉用户正在发生哪些情况,并描述“未合并”的含义,从而改善这种情况。

git status现在在其手册页中包括:

这种格式显示了三种不同类型的状态,每种状态都使用XY语法不同:
  • 当正在发生合并并且合并成功或在合并之外时,X显示索引的状态,Y显示工作树的状态。
  • 当发生合并冲突并且尚未解决时,XY显示由合并的每个头引入的状态,相对于共同的祖先。
    这些路径被称为未合并的。
  • 当路径未被跟踪时,XY始终相同,因为它们对索引是未知的。未跟踪的路径使用??表示。
    除非使用--ignored,否则忽略的文件不会列出;如果使用,则忽略的文件将用!!表示。
请注意,此处的术语“合并”也包括使用默认--merge策略进行的变基、cherry-pick和使用合并机制的任何其他操作。 在下表中,这三个类别显示在不同的部分中,并且用于显示已跟踪路径的前两个部分的XY字段的字符如下:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接