繁体   English   中英

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

[英]How do you recreate the GitHub pull request diff on the commandline?

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

最接近的是与特征分支和基础分支之间的共同祖先不同。

就像是:

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

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

0.9.0 版本包括gh pr diff

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

不确定是否有办法让实际的差异格式更接近 Github 风格,但$ git diff master...<branch_name>似乎显示了拉取请求将显示的一组更改(假设它是针对master的拉取请求) . 拉取请求中已更改文件的列表似乎等同于$ git diff --name-status master...<branch_name> 我想这一切都假设您的本地分支与远程 Github 分支保持同步

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

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

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

git diff branchA branchB应该可以工作,不是吗?

可以在此处找到有关其他可能有用的差异符号的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM