如何知道哪些文件已被修改以修复从 git 提交开始的错误?

How to know which files have been modified to fix a bug starting from a git commit?

我正在处理一个 Java 项目,我需要了解哪些文件已被修改以修复错误。

我正在处理的项目的版本控制是通过 Git 管理的。

到目前为止,我已经能够获得修复错误的提交,但是从这里开始我如何才能获得已修改的文件?

我可能必须 运行 在修复错误的提交和另一个提交之间 diff,但是另一个提交是什么? 我可以通过提交图得到它吗?如果是,怎么做?

所有这些都必须在 Java 中完成...以便与 GitHub 交互我正在使用 jgit 库。

您可以使用 git diff--name-only 标志比较两个提交以检查它们之间的更改。

例如,如果你想比较最近 5 次提交的变化,你可以使用 HEAD 引用:

git diff --name-only HEAD HEAD~5

第一个提交引用是最新的。

如果你想比较特定提交与 HEAD 提交的更改文件,你可以通过以下方式获得:

git diff --name-only HEAD 8614c3d70397f03ab504de8d23e8255d52fa3ed1

其中 8614c3d70397f03ab504de8d23e8255d52fa3ed1 是您的示例提交哈希。

专门针对您的申请

由于您想检查在一次特定提交中更改的文件,您可以使用相同的逻辑执行以下操作:

git diff --name-only COMMIT_HASH COMMIT_HASH~1

因此,如果 bugfix 提交具有散列 8614c3d70397f03ab504de8d23e8255d52fa3ed1,您可以通过执行以下操作检查此提交中更改的文件:

git diff --name-only 8614c3d70397f03ab504de8d23e8255d52fa3ed1 8614c3d70397f03ab504de8d23e8255d52fa3ed1~1

要查看修改过的文件,您可以这样做

git show --name-status some-revision

您也可以指定 --name-only 而不是 --name-status

git diff 也有效,但它主要用于范围,因为如果你想使用 diff 并且只提供一个修订作为参数,你最终会与当前的工作树进行比较,所以你最终不得不当您想要检查由单个修订修改的文件时,传入 2 个参数。