如何在Git提交中识别已添加或已删除的文件/目录?

22

我需要编写一个脚本,逐步跟踪添加和删除的文件和目录从Git存储库中。

我尝试使用了:

git log -n1 --pretty="format:" --name-only

但这只告诉我哪些文件已经提交了,没有说明是添加还是删除。

有什么想法吗?

2个回答

38

你要寻找的选项是--name-status。像--name-only一样,它实际上是git-diff选项;git-log接受这些选项来确定它将如何显示补丁。

git log -n 1 --pretty=oneline --name-status

或者等价地(去除日志头部分):

git diff --name-status HEAD^ HEAD

正如isbadawi所指出的那样,你也可以使用git-whatchanged。这基本上是具有特定差异输出的git-log:

git whatchanged -n 1

你可能更喜欢--name-status这个版本,因为它不会显示所有blob哈希值,只会显示可读的状态。


1
搞定了!现在我只需要编写一个脚本来读取那一行并挑选出A和D,然后就完成了。谢谢。 - pocketfullofcheese
2
输出包含名为 .gitignore 的文件的添加的特定提交,格式为 _提交信息、更改文件的名称和状态_:git log --name-status --diff-filter=A --follow .gitignore - Eido95

7

为什么这个没有得到更高的投票?简明易懂,易于记忆,就能解决问题。 - elPastor
@elPastor 它没有得到更高的投票,是因为它打算被弃用并由 git log 替代。它现在仍然有用,但对于未来的读者可能不再适用。 - John Pavek
好知道,谢谢。虽然git log不包括添加的文件,至少在其普通形式下不包括。 - elPastor

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