0

如果我有一个给定的提交 SHA,那么仅显示通过该提交添加的文件的最佳方式是什么?谢谢。

4

2 回答 2

3

“最好的”是棘手的(冰淇淋最好的味道是什么?)但有很多方法。

最短的输出,但假设提交不是合并[编辑:或者,见下文]:

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-Asubtopic-Bsubtopic-Ctopic并且 filexyz存在于两个subtopic-Bandtopic中,但不存在于任何一个subtopic-Aorsubtopic-C中。被xyz“添加”了吗?

编辑:如果“添加”的定义意味着“在合并之前不在大多数人所说的'主线'中”,那么同样的命令也可以工作。也就是说,如果您在上面的分支topic上,并且您将一个或多个其他分支合并到topic并且最终合并提交包含文件galumphtopic没有galumph之前命名的文件,这将被视为“添加”(无论如何,如果任何合并的分支都有它)。

于 2013-10-19T21:28:11.270 回答
0

经过更多研究,这似乎是一个非常可靠的解决方案。

git show -m --name-status -1 -U | grep $'A\t'

于 2013-10-19T21:38:07.197 回答