如何在命令行上重新创建GitHub拉请求差异?

时间:2014-09-27 21:45:07

标签: git github pull-request

在我打开拉取请求的分支上工作时,我希望看到GitHub在命令行上显示的完全相同的差异。什么是特定的git diff命令复制GitHub为拉取请求显示的更改列表?

6 个答案:

答案 0 :(得分:7)

最接近的是在功能分支和基本分支之间使用共同祖先进行差异化。

类似的东西:

git diff `git merge-base feature-branch base-branch`

答案 1 :(得分:4)

如果您不想执行任何git fetch并更新本地PR分支,则只需使用GitHub的命令行界面 cli/cli

release 0.9.0包括 gh pr diff

https://user-images.githubusercontent.com/98482/82266353-13a03300-992f-11ea-8d71-2a0995707f87.png

答案 2 :(得分:0)

请参阅GitHub高级培训中的Reviewing and Synchronising部分。特别是,在获取拉取请求之后,您可以在合并之前查看差异:

$ git fetch origin refs/pull/1/head
$ git show FETCH_HEAD

答案 3 :(得分:0)

不确定是否有办法让实际的diff格式更接近Github样式,但$ git diff master...<branch_name>似乎显示了pull请求将显示的一组更改(假设它是针对{{1}的拉取请求})。拉取请求中已更改文件的列表似乎等同于master。我想这一切都假设您的本地分支机构与远程Github分支机构是最新的

答案 4 :(得分:0)

假设您要检查名为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无法做到的。

答案 5 :(得分:-1)

git diff branchA branchB应该有效,不是吗?

关于其他可能有用的diff notations can be found here

的更多信息