如何找出给定git提交中更改的文件?

时间:2013-04-30 19:39:07

标签: git

我正在解决一个过去常常工作的问题。给定sha1,如何找出哪些文件作为其中的一部分进行了更改?

3 个答案:

答案 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 b02be8bcommit 40ae3d3commit 2008f29Jeff 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”配置。
  如果我们接受这是人类可读的输出,那么我们应该在显示方式上尊重用户的选择。