3

我正在解决一个问题,以前可以工作的东西突然不工作了。给定 a sha1,我如何找出其中更改了哪些文件?

4

3 回答 3

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
于 2013-04-30T19:45:08.607 回答
2

git show --name-only <the-hex-sha1-string>应该做的伎俩。在这里,我假设sha1您提到的是提交的 sha1 签名。

考虑阅读有关git bisect进一步故障排除的信息。

于 2013-04-30T19:42:32.940 回答
1

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" 配置。
如果我们接受这是人类可读的输出,那么我们应该尊重用户对如何显示它的选择。

于 2019-03-23T21:10:54.400 回答