如果我有一个给定的提交 SHA,那么仅显示通过该提交添加的文件的最佳方式是什么?谢谢。
2 回答
“最好的”是棘手的(冰淇淋最好的味道是什么?)但有很多方法。
最短的输出,但假设提交不是合并[编辑:或者,见下文]:
git diff --name-only --diff-filter=A <id>^ <id>
使用它的最简单方法可能是使用 git 别名:
git config alias.files-added '!git diff --name-only --diff-filter=A $1^'
(请注意,git files-added
不带参数运行会给出一个奇怪的“错误修订”消息,但是哦,好吧)。
如果您需要处理合并提交,则必须确定“添加文件”的含义。如果文件不在任何父项中,是否添加文件?如果不是在所有父母中都添加了吗?例如,假设您已将 、 和 合并subtopic-A
到subtopic-B
中subtopic-C
,topic
并且 filexyz
存在于两个subtopic-B
andtopic
中,但不存在于任何一个subtopic-A
orsubtopic-C
中。被xyz
“添加”了吗?
编辑:如果“添加”的定义意味着“在合并之前不在大多数人所说的'主线'中”,那么同样的命令也可以工作。也就是说,如果您在上面的分支topic
上,并且您将一个或多个其他分支合并到topic
并且最终合并提交包含文件galumph
时topic
没有galumph
之前命名的文件,这将被视为“添加”(无论如何,如果任何合并的分支都有它)。
经过更多研究,这似乎是一个非常可靠的解决方案。
git show -m --name-status -1 -U | grep $'A\t'