问题描述
我的问题与此非常相似 - May I list the files of the current commit?
问题陈述:我正在尝试获取在“master”分支的最后一次提交中新增/更改的所有文件的列表。
我尝试过的:从我的项目的 .git
目录所在的目录运行这些命令。 git show --name-only
和 git show --name-only master
但未显示预期结果。
它向我展示了这个:
Merge: f733602 4d98b76
Author: Some Name <some.name@company.com>
Date: Thu Jul 1 11:34:49 2020 -0700
Merge pull request #28 from secret/my_rqd_files
我期望的是 - 它应该显示所有文件的列表及其在 repo 中的完整路径。
问题:我应该怎么做或我做错了什么?
解决方法
您尝试的很好,但它是一个合并修订版。这有点不同。试试
git diff --name-only HEAD~
或
git diff --name-only master~ master
我的预感是,鉴于它是一个合并修订,git show
只会显示修订本身中引入的更改,这些更改不是来自正在合并的分支......例如冲突解决之类的事情.... 加上您可能手动引入的其他更改。
您误解了提交是什么。一方面你说:
列出所有在主分支最后提交的文件
另一方面你说:
我正在尝试获取在“master”分支的最后一次提交中新增/更改的所有文件的列表。
这是两种完全不同的东西。 Git 中的提交不是一组新的/更改的文件。它是您所有文件的快照。
因此,您可以看到所有在最近的 master
提交中的文件列表:
git ls-tree --name-only --full-name master
但是如果您的目标是查看该提交相对于前一个提交的更改,那么您需要要求 Git 从前一个提交生成 diff :
git diff --name-status master~1 master
这显示了文件的紧凑列表及其状态(即文件是添加 (A) 还是修改 (M))。示例:
% git diff --name-status master~1 master
M a
A what
我编辑了文件 a
并添加了文件 what
。