如果我有一个给定的提交SHA,那么只显示通过该提交添加的文件的最佳方法是什么?感谢。
答案 0 :(得分: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
,xyz
和subtopic-B
中都存在文件topic
。 subtopic-A
,但subtopic-C
或xyz
中没有。是topic
“已添加”?
编辑:如果“添加”的定义意味着“不是大多数人在合并之前称之为'主线'”,那么这个命令就可以了。也就是说,如果您在上面的分支topic
上,并且您将一个或多个其他分支合并到galumph
,并且当topic
执行时,最终合并提交包含文件galumph
之前没有名为{{1}}的文件,这将被视为“已添加”(无论合并分支中的哪个,如果有的话)。
答案 1 :(得分:0)
经过一番研究后,这似乎是一个非常可靠的解决方案。
git show -m --name-status -1 -U | grep $'A \ t'