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

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

技术背景

在使用Git进行版本控制时,有时需要查看某个提交中包含的所有文件。这对于代码审查、问题排查以及了解项目的变更历史都非常有帮助。

实现步骤

首选方式(适合编程使用)

使用git diff-tree命令:

1
git diff-tree --no-commit-id --name-only <commit-ish> -r
  • --no-commit-id:抑制提交ID输出。
  • --name-only:仅显示受影响的文件名。
  • -r:递归到子树。

示例:

1
git diff-tree --no-commit-id --name-only bd61ad98 -r

另一种方式(不太适合脚本使用)

使用git show命令:

1
git show --pretty="" --name-only <commit-ish>
  • --pretty:指定一个空的格式字符串,避免开头的冗余信息。
  • --name-only:仅显示受影响的文件名。

示例:

1
git show --pretty="" --name-only bd61ad98

获取所有文件列表

使用git ls-tree命令:

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

获取两个提交之间的更改文件列表

使用git diff命令:

1
git diff --name-only <START_COMMIT>..<END_COMMIT>

如果需要查看每个文件的更改状态(添加、修改、删除等),可以使用--name-status选项:

1
git diff --name-status <START_COMMIT>..<END_COMMIT>

查看最近提交的更改文件

1
git diff HEAD~1 --name-only

使用git whatchanged命令

1
git whatchanged <commit-id>

该命令会输出提交摘要以及每个文件的模式和更改状态(添加、删除、修改)。

查看合并提交中的更改文件

1
git log -m -1 --name-only --pretty="format:"

1
git log -m -1 --name-status --pretty="format:"

查看两个变更集之间的修改文件

1
git diff --name-status <SHA1> <SHA2> | cut -f2

核心代码

以下是一些常用命令的总结:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 列出指定提交中的所有文件
git diff-tree --no-commit-id --name-only <commit-ish> -r
git show --pretty="" --name-only <commit-ish>
git ls-tree --name-only -r <commit-ish>

# 列出两个提交之间的更改文件
git diff --name-only <START_COMMIT>..<END_COMMIT>
git diff --name-status <START_COMMIT>..<END_COMMIT>

# 列出最近提交的更改文件
git diff HEAD~1 --name-only

# 查看提交摘要和文件更改状态
git whatchanged <commit-id>

# 查看合并提交中的更改文件
git log -m -1 --name-only --pretty="format:"
git log -m -1 --name-status --pretty="format:"

# 查看两个变更集之间的修改文件
git diff --name-status <SHA1> <SHA2> | cut -f2

最佳实践

  • 对于编程场景,优先使用git diff-treegit diff命令,因为它们是底层命令,更适合自动化处理。
  • 对于日常查看,git showgit log命令更方便,它们提供了更多的人类可读信息。
  • 可以通过设置别名来简化常用命令,例如:
1
git config --global alias.changed 'show --pretty="format:" --name-only'

然后可以使用git changed来查看提交中的更改文件。

常见问题

命令输出包含多余信息

如果命令输出包含不需要的信息,可以使用--name-only--name-status选项来过滤输出,只显示文件名或文件名和更改状态。

无法找到指定的提交

确保提交ID或引用(如分支名、标签名)正确,并且该提交存在于当前仓库中。可以使用git log命令查看提交历史,确认提交ID。


如何列出提交中的所有文件
https://119291.xyz/posts/2025-05-09.how-to-list-all-files-in-a-commit/
作者
ww
发布于
2025年5月9日
许可协议