如何从GitHub下载单个提交的差异?

167
我想通过Web界面从GitHub获取单个提交(我们称其为${SHA})。
例如,类似以下内容:
$ git clone http://github.com/foo/bar
$ cd bar
$ git format-patch -o .. ${SHA}~1..${SHA}
$ cd ..
$ rm -rf bar

如果不想克隆整个仓库(该仓库非常庞大),那么怎样才能查看给定提交的差异呢?

显然,GitHub可以通过Web界面显示某个提交的差异,但我该如何将其提取到一个(统一的)差异文件中(最好连提交消息都保留下来)?


2
可能是重复的问题:如何将Github拉取请求下载为统一的差异文件? - Chillar Anand
4
不是的。你的链接是关于拉取请求而不是单个提交的差异。 - usr1234567
2个回答

357

好的,我自己找到了答案。

在提交的URL后面添加.patch(或.diff)将会给出一个漂亮的补丁:

https://github.com/foo/bar/commit/${SHA}.patch

感谢《你不知道的 Git 和 GitHub 十件事》,让我受益匪浅...


我们能否直接在 git apply 命令中使用这个 URL? 例如:git apply <url.diff> - Darshan L
2
@DarshanL,那是关于git命令行工具的能力的完全不同的问题(而且非常容易尝试;-)),与github无关(github只是这样一个文件的提供者;但是任何通过http://提供的补丁文件都可以)- 然而简短的答案可能是:不。 - umläute
是否有一种简单的方法来获取补丁,如果它是由几个提交完成的?(而不是下载和应用多个补丁) - baptx
1
如果你在使用.patch时遇到了Content containing PDF or PS header bytes cannot be rendered from this domain for security reasons.的错误提示,可以尝试使用.diff。这个方法对我有效。 - PF4Public
如果您的提交或PR中有二进制文件,请使用.patch而不是.diff - Wenod Pathirana
显示剩余2条评论

11
我发现我必须在结尾处添加一个 /,即

https://github.com/foo/bar/commit/${SHA}.patch/

11
截至今日,我无法再现此问题:https://github.com/torvalds/linux/commit/1ffaddd029c867d134a1dde39f540dcc8c52e274.patch(没有斜杠)对我来说可以正常工作(已在Firefox、cURL和wget中进行了测试)。 - umläute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接