【发布时间】:2014-11-22 15:24:59
【问题描述】:
在我打开拉取请求的分支上工作时,我希望看到 GitHub 在命令行上显示的完全相同的差异。复制 GitHub 为拉取请求显示的更改列表的特定 git diff 命令是什么?
【问题讨论】:
-
这个问题比您链接的问题早 2 年。所以另一个是重复的;)
标签: git github pull-request
在我打开拉取请求的分支上工作时,我希望看到 GitHub 在命令行上显示的完全相同的差异。复制 GitHub 为拉取请求显示的更改列表的特定 git diff 命令是什么?
【问题讨论】:
标签: git github pull-request
最接近的方法是区分特征分支和基本分支之间的共同祖先。
类似:
git diff `git merge-base feature-branch base-branch`
【讨论】:
【讨论】:
不确定是否有办法让实际的差异格式更接近 Github 风格,但 $ git diff master...<branch_name> 似乎显示了拉取请求将显示的一组更改(假设它是针对 master 的拉取请求)。拉取请求中更改的文件列表似乎等同于$ git diff --name-status master...<branch_name>。我想这一切都假设您的本地分支与远程 Github 分支是最新的
【讨论】:
请参阅 GitHub 高级培训中的 Reviewing and Synchronising 部分。特别是,在获取拉取请求后,您可以在合并之前查看差异:
$ git fetch origin refs/pull/1/head
$ git show FETCH_HEAD
【讨论】:
git diff ...master + flags。
假设您要检查名为 master 的基本分支:
git diff $(git merge-base --fork-point master)
这将给出分支创建后的所有更改,包括尚未提交的更改!
此命令给出的结果与@pic 的答案中的结果相同,但它更简单一些,因为它不需要知道特征分支。
如果您只想要提交的更改,类似于@VonC 的答案中的gh pr diff 命令,以下命令将给出相同的结果:
git diff $(git merge-base --fork-point master) HEAD
git diff 方式方法在某些情况下可能更有用,因为您可以使用所有其他 git diff 功能。例如,如果您不想要差异,而是想知道修改了哪些文件,您可以传递 --name-only:
git diff --name-only $(git merge-base --fork-point master)
gh 无法做到这一点。
【讨论】:
gh pr diff不同。他们给了我在 feature 分支和 master 分支之间更改的每个文件,即,如果自创建 fork 以来有其他合并到 master,它们也会被列出
git diff $(git merge-base master HEAD)。我可能应该更新这个答案。让我知道它是否有效。
git diff branchA branchB 应该可以,不是吗?
更多关于其他可能有用的信息diff notations can be found here
【讨论】: