我正在解决一个过去常常工作的问题。给定sha1
,如何找出哪些文件作为其中的一部分进行了更改?
答案 0 :(得分:3)
任何这些都应该有效:
git diff-tree --no-commit-id --name-only -r <COMMIT_SHA1>
git show --pretty="format:" --name-only <COMMIT_SHA1>
示例输出:
foo
bar
baz
要同时显示更改中每个文件的状态,请改用--name-status
选项:
git diff-tree --no-commit-id --name-status -r <COMMIT_SHA1>
git show --pretty="format:" --name-status <COMMIT_SHA1>
示例输出:
A foo
M bar
D baz
答案 1 :(得分:2)
git show --name-only <the-hex-sha1-string>
应该做到这一点。
在这里,我假设您提到的sha1
是提交的sha1签名。
请考虑阅读git bisect
以进一步排查问题。
答案 2 :(得分:1)
git bisect
实际上涉及git diff-tree
,并且在Git 2.22(2019年第二季度)中得到了改进。
来自“ git bisect
”的最终报告用于使用原始“ diff-tree
”显示可疑的罪魁祸首,其中没有用于合并提交的输出。
已对其进行了更新,以使用更加简洁易懂的现代输出方式。
请参见commit b02be8b的commit 40ae3d3,commit 2008f29,Jeff King (peff
)(2019年2月22日)。
(由Junio C Hamano -- gitster
--在commit 1b8f4dc中合并,2019年3月20日)
bisect
:使diff-tree
的输出更漂亮在完成对分之后,我们使用内部版本
diff-tree
打印发现的提交。结果在美学上缺乏:
显示原始差异,通常对人类的信息较少 读者比“ {
--stat --summary
”(我们已经确定不错) 用于格式补丁的输出中的人类。)通过不缩写哈希,结果可能会包裹在大多数 人民航站楼
我们不使用“
-r
”,因此,如果提交涉及目录中的文件, 您只会看到提到的顶级目录我们没有指定“
--cc
”或类似名称,因此合并不会打印任何内容(不是 甚至是提交消息!)即使bisect可能由脚本驱动,也没有理由将输出的这一部分视为机器可读的(如果有的话,可能会解析初始的“
$hash
是第一个错误的提交”,但是我们这里不会碰到它。)
让我们使它更漂亮,让人们更容易阅读输出。在调整选项的同时,我们还切换到使用diff“
ui
”配置。
如果我们接受这是人类可读的输出,那么我们应该在显示方式上尊重用户的选择。