git diff 在分支的 x 提交中更改了文件

git diff changed files in x commits of a branch

任务是输出在 origin/1.5.0 分支的最后 5 次提交中更改的文件。

没有分支要求我想出了:git diff --name-only HEAD~5。根据分支要求,我尝试了 git diff --name-only HEAD~5 --first-parent origin/1.5.0 但输出更长。添加条件不应产生更多结果,这意味着有些事情我不明白。我哪里做错了?

我认为在 "origin/1.5.0" 中,命令更改为将 HEAD~5 与分支 origin/1.5.0 进行比较。这与没有分支的差异很大。

git diff 命令总是1 比较两个提交或文件树。 选项和参数 select 其中两个(以及如何进行差异,例如--name-only--name-status 跳过 diff 的补丁部分)。

如果您 运行 git diff HEAD~5,您 select 编辑的两件事是:

  1. HEAD~5:从HEAD后退五步的提交,当前提交
  2. 当前工作树

为了比较,如果你 运行 git diff --cached HEAD~5,你 select 而不是 HEAD~5 和当前 index,如果你 运行 git diff HEAD~10 HEAD~5 你 select 而不是 HEAD~10HEAD~5.

请注意 ~<em>number</em> 语法来自 gitrevisions。后跟整数的波浪号后缀可以应用于任何其他提交 select 或者,例如原始哈希 ID、名称 HEAD、您自己的分支或标签之一的名称,或名称您的任何 远程跟踪分支 。由于 origin/1.5.0 是远程跟踪分支的名称,您可以使用它来指定该名称指向的提交,或者添加波浪号和数字以从该点向后移动那么多的第一父步骤。

因此:

git diff --name-only origin/1.5.0~5 origin/1.5.0

将比较两个指定的提交,只显示在这两个提交中不相同的文件名。


1你可以让它在一些有趣的情况下表现得不同,但它们不是我们在这里关心的。