我正在解决一个问题,以前可以工作的东西突然不工作了。给定 a sha1
,我如何找出其中更改了哪些文件?
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
git show --name-only <the-hex-sha1-string>
应该做的伎俩。在这里,我假设sha1
您提到的是提交的 sha1 签名。
考虑阅读有关git bisect
进一步故障排除的信息。
git bisect
实际上涉及git diff-tree
,并且在 Git 2.22(2019 年第二季度)中得到了改进。
" "的最终报告git bisect
使用原始的 " " 来显示可疑的罪魁祸首diff-tree
,其中没有合并提交的输出。
这已更新为使用更现代且人类可读的输出,该输出仍然足够简洁。
请参阅Jeff King ( )的提交 b02be8b、提交 40ae3d3、提交 2008f29(2019 年 2 月 22 日) 。(由Junio C Hamano 合并 -- --在1b8f4dc 提交中,2019 年 3 月 20 日)peff
gitster
bisect
: 使diff-tree
输出更漂亮完成二等分后,我们使用内部版本打印出我们找到的提交
diff-tree
。结果在美学上缺乏:
它显示了一个原始差异,对于人类读者来说,它通常比“
--stat --summary
”提供的信息更少(我们已经决定在格式补丁的输出中对人类来说很好)。通过不缩写哈希,结果很可能会在大多数人的终端上包装
我们不使用“
-r
”,所以如果提交触及目录中的文件,你只会看到提到的顶级目录我们没有指定 "
--cc
" 或类似的,所以合并不打印任何东西(甚至不打印提交消息!)即使 bisect 可能由脚本驱动,也没有理由认为这部分输出是机器可读的(如果有的话,
$hash
可能会解析初始的“是第一个错误提交”,但我们不会在这里触及它)。
让我们让它更漂亮、更有用,以供人类阅读输出。在我们调整选项的同时,让我们也切换到使用 diff "
ui
" 配置。
如果我们接受这是人类可读的输出,那么我们应该尊重用户对如何显示它的选择。