使 git diff 显示与 Github 相同的结果,但来自很久以前
Make git diff show the same result as Github, but from a long time ago
每当你执行一个拉取请求时,你会得到这个 PR 的变化的一个很好的差异,与主人。
我希望能够保存这些 PR - 实际上是这些差异,以便研究特定主题。
但是,无法将 html 页面正确保存为 html 或 pdf。
因此,在该站点成员的帮助下,我找到了 diff2html
,它将差异导出到 html。
使用这个答案:
我做到了git diff feature/BRANCH_I_AM_INTERESTED_IN...master | diff2html -i stdin -F diff.html
然而,这给了我很多很多结果。它包括许多后来更改的文件 - 而不是在合并 PR 时。
我猜这是为了与该分支的最新版本进行比较,与当前 当前 .
的 master 进行比较
然而,PR diff 是分支与主分支在过去的比较。
那么,有没有办法获取 PR 的差异 - 换句话说,获取分支和主节点的差异,但在合并 PR 时?
首先,让我们修正这个命令的语法:
git diff feature/BRANCH_I_AM_INTERESTED_IN...master
您观察的原因:
However, this gives me many many results. It includes many many files that were changed at a much later time...
是因为你翻转了树枝。当您将 3 点语法与 diff
一起使用时,它会在右侧显示自分支拆分后的所有更改。 (这里有一个 quick cheat sheet 的点语法,涵盖了 diff
和 log
。)
为了查看将分支 feature/BRANCH_I_AM_INTERESTED_IN
合并到 master
的 PR 中的更改,您需要的命令应该是:
git diff master...feature/BRANCH_I_AM_INTERESTED_IN
但是,这可能不完全您想要的!这可能在大多数情况下都有效,但在 feature/BRANCH_I_AM_INTERESTED_IN
上的某些更改也已驻留在 master
上的情况下不起作用。例如,也许您的功能分支上的错误修复非常重要,以至于必须 cherry-picked 到 master
才能尽快制作生产修补程序。因此,您在 PR 上下文中看到的幕后差异可能不同于明显的 3 点语法差异。由于 PR 工具(GitHub、GitLab、AzureDevops、BitBucket 等)独立于 Git 本身,因此您看到的差异甚至可能因您使用的工具而异使用!
重要提示: 在 diff 命令中使用分支名称,特别是 master
,仅在 before PR 是完全的。如果你想在 PR 完成后使用相同的命令,你需要将 master
更改为 master
在完成之前指向的提交。
话虽这么说,幸运的是,就您问题的上下文而言,一旦 PR 完成,确实 straight-forward 可以看到 PR 的确切变化是什么在没有 diff 命令的情况下引入。 (请注意,这确实表明,如果您比较 after PR 完成的差异,这与 PR 工具向您显示的 before 不同完成,然后 PR 工具实际上是“错误的”,或者至少是“误导的”,不幸的是,这种情况很常见!)
要查看 PR 带来了哪些更改,您只需将 PR 的合并提交与 first-parent 进行比较。通常你可以用 2 点差异来做到这一点:
git diff <commit-id-of-PR-merge-commit>~1..<commit-id-of-PR-merge-commit>
(请注意,您应该将父提交放在 diff 命令中的第一位,以便您从正确的 POV 中看到它。如果您翻转它们,新文件将显示为删除等)
现在,如果您没有 PR 的合并提交怎么办?如果要合并的分支已经是最新的 master
,并且允许 fast-forward 合并意味着没有创建合并提交,则会发生这种情况。在那种情况下,它有点棘手,因为您必须知道提交 master
在该 PR 完成之前已经开始。我希望您使用的任何 PR 工具都能够在历史背景下提供该信息,以便您可以比较 master
上代表 PR 完成前后的两次提交。
每当你执行一个拉取请求时,你会得到这个 PR 的变化的一个很好的差异,与主人。
我希望能够保存这些 PR - 实际上是这些差异,以便研究特定主题。
但是,无法将 html 页面正确保存为 html 或 pdf。
因此,在该站点成员的帮助下,我找到了 diff2html
,它将差异导出到 html。
使用这个答案:
我做到了git diff feature/BRANCH_I_AM_INTERESTED_IN...master | diff2html -i stdin -F diff.html
然而,这给了我很多很多结果。它包括许多后来更改的文件 - 而不是在合并 PR 时。
我猜这是为了与该分支的最新版本进行比较,与当前 当前 .
的 master 进行比较然而,PR diff 是分支与主分支在过去的比较。
那么,有没有办法获取 PR 的差异 - 换句话说,获取分支和主节点的差异,但在合并 PR 时?
首先,让我们修正这个命令的语法:
git diff feature/BRANCH_I_AM_INTERESTED_IN...master
您观察的原因:
However, this gives me many many results. It includes many many files that were changed at a much later time...
是因为你翻转了树枝。当您将 3 点语法与 diff
一起使用时,它会在右侧显示自分支拆分后的所有更改。 (这里有一个 quick cheat sheet 的点语法,涵盖了 diff
和 log
。)
为了查看将分支 feature/BRANCH_I_AM_INTERESTED_IN
合并到 master
的 PR 中的更改,您需要的命令应该是:
git diff master...feature/BRANCH_I_AM_INTERESTED_IN
但是,这可能不完全您想要的!这可能在大多数情况下都有效,但在 feature/BRANCH_I_AM_INTERESTED_IN
上的某些更改也已驻留在 master
上的情况下不起作用。例如,也许您的功能分支上的错误修复非常重要,以至于必须 cherry-picked 到 master
才能尽快制作生产修补程序。因此,您在 PR 上下文中看到的幕后差异可能不同于明显的 3 点语法差异。由于 PR 工具(GitHub、GitLab、AzureDevops、BitBucket 等)独立于 Git 本身,因此您看到的差异甚至可能因您使用的工具而异使用!
重要提示: 在 diff 命令中使用分支名称,特别是 master
,仅在 before PR 是完全的。如果你想在 PR 完成后使用相同的命令,你需要将 master
更改为 master
在完成之前指向的提交。
话虽这么说,幸运的是,就您问题的上下文而言,一旦 PR 完成,确实 straight-forward 可以看到 PR 的确切变化是什么在没有 diff 命令的情况下引入。 (请注意,这确实表明,如果您比较 after PR 完成的差异,这与 PR 工具向您显示的 before 不同完成,然后 PR 工具实际上是“错误的”,或者至少是“误导的”,不幸的是,这种情况很常见!)
要查看 PR 带来了哪些更改,您只需将 PR 的合并提交与 first-parent 进行比较。通常你可以用 2 点差异来做到这一点:
git diff <commit-id-of-PR-merge-commit>~1..<commit-id-of-PR-merge-commit>
(请注意,您应该将父提交放在 diff 命令中的第一位,以便您从正确的 POV 中看到它。如果您翻转它们,新文件将显示为删除等)
现在,如果您没有 PR 的合并提交怎么办?如果要合并的分支已经是最新的 master
,并且允许 fast-forward 合并意味着没有创建合并提交,则会发生这种情况。在那种情况下,它有点棘手,因为您必须知道提交 master
在该 PR 完成之前已经开始。我希望您使用的任何 PR 工具都能够在历史背景下提供该信息,以便您可以比较 master
上代表 PR 完成前后的两次提交。