如何列出一次提交中的所有文件?

我正在寻找一个简单的git命令,该命令可提供所有文件的格式良好的列表,这些文件是哈希(SHA1)给出的提交的一部分,没有任何多余的信息。

我试过了:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

尽管它列出了文件,但每个文件都包含不需要的差异信息。

还有另一个git命令将仅提供我想要的列表,以便避免从git show输出中解析它吗?

答案

首选方式 (因为这是一条管道命令;是编程的):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

另一种方式 (脚本不那么受欢迎,因为它是瓷器命令;意味着面向用户)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • --no-commit-id禁止提交 ID 输出。
  • --pretty参数指定一个空的格式字符串,以避免开头出现--pretty
  • --name-only参数--name-only显示受影响的文件名(谢谢汉克)。使用--name-status相反,如果你想看看发生了什么,以每个文件(d eleted, odified,A dded)
  • -r参数是递归到子树中

如果要获取已更改文件的列表:

git diff-tree --no-commit-id --name-only -r <commit-ish>

如果要获取提交中所有文件的列表,可以使用

git ls-tree --name-only -r <commit-ish>

我只是假设不需要gitk 。在这种情况下,请尝试git show --name-only <sha>

我个人将--stat--onelineshow命令结合使用:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

如果您不喜欢 / 不想添加 / 删除统计信息,可以将--stat替换为--name-only

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD

你也可以

git log --name-only

您可以浏览各种提交,提交消息和更改的文件。

键入 q 以返回提示。

最近,我需要列出两次提交之间所有已更改的文件。所以我用了这个(也是 * nix 专用的)命令

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

更新 :或如伊森指出以下

git diff --name-only START_COMMIT..END_COMMIT

使用--name-status还将在每个文件旁边包含更改(添加,修改,删除等)

git diff --name-status START_COMMIT..END_COMMIT

最简单的形式:

git show --stat (hash)

这更容易记住,它将为您提供所需的所有信息。

如果您只需要文件名,则可以添加--name-only选项。

git show --stat --name-only (hash)

我经常使用更改的别名。进行设置:

git config --global alias.changed 'show --pretty="format:" --name-only'

然后:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

可能有用的类似命令:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only

使用标准的 git diff 命令 (也适用于脚本编写):

git diff --name-only <sha>^ <sha>

如果还需要更改文件的状态:

git diff --name-status <sha>^ <sha>

这与合并提交一起很好地工作。

采用

git log --name-status

这将向您显示提交 ID,消息,更改的文件以及是否对其进行了修改,创建,添加或删除。多合一命令。