Github 如何在命令行下处理 Pull Request?

赞赏 2017-07-24

Github 的一大特色就是 Pull Request 功能(简写为 PR)。
对于多人合作的项目,该功能简直必不可少。大部分人都是使用 Web 界面(如下图),本文介绍如何在命令行下处理 PR:

Github 如何在命令行下处理 Pull Request?

翻译自 Cédric Beust 的文章


一、Pull Request 是什么?

Github 官方文档的定义如下。

"Pull Request 是一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request。"

Pull Request 本质上是一种软件的合作方式,是将涉及不同功能的代码,纳入主干的一种流程。这个过程中,还可以进行讨论、审核和修改代码。


二、Pull Request 的流程

第一步,你需要把别人的代码,克隆到你自己的仓库,Github 的术语叫做 fork

第二步,在你仓库的修改后的分支上,按下"New pull request"按钮。

这时,会进入一个新页面,有Base 和 Head 两个选项。Base 是你希望提交变更的目标,Head  是目前包含你的变更的那个分支或仓库。

第三步,填写说明,帮助别人理解你的提交,然后按下"create pull request"按钮即可。

PR 创建后,管理者就要决定是否接受该 PR。对于非代码变更(比如文档),单单使用 Web 界面就足够了。但是,对于代码变更,Web 界面可能不够用,需要命令行验证是否可以运行。


三、git am

git am命令用于将一个 patch 文件,合并进入当前代码。

Github 对每个 PR 会自动生成一个 patch 文件。我们下载该文件,合并进本地代码,就可以在本地查看效果了。

$ curl -L http://github.com/cbeust/testng/pull/17.patch | git am

上面代码中,curl-L参数表示,如果有302跳转,curl会自动跟进。后面网址里面的/cbeust/testng是目标仓库,pull/17表示该仓库收到的第17个 PR。

如果 PR 只包含一个 commit,那么也可以直接下载这个 commit 的 patch 文件。

$ curl https://github.com/sclasen/jcommander/commit/bd770141029f49bcfa2e0d6e6e6282b531e69179.patch | git am

上面代码中,网址里面的/sclasen/jcommander是代码变更所在的那个仓库。


四、创建远程仓库

另一种方法是为 PR 创建一个远程分支,追踪提交者的仓库。

# 创建远程仓库,指向 PR 提交者的仓库
$ git remote add nullin git://github.com/nullin/testng.git

# 从该远程仓库拉取代码
$ git fetch nullin

# 将该仓库的某个分支合并到当前分支
$ git merge kneath/error-page

# 推送到自己的仓库
$ git push origin master

五、cherry-pick

有时,PR 里面包含好几个 commit,但是你只想合并其中的一个或几个。

这时可以使用cherry-pick命令,挑出你感兴趣的 commit。

# 建立远程分支,追踪提交者的仓库
$ git remote add nullin git://github.com/nullin/testng.git

# 从该远程仓库拉取代码
$ git fetch nullin

# 只将感兴趣的 commit 加入当前代码
$ git cherry-pick commit1
$ git cherry-pick commit2

# 推送到自己的仓库
$ git push origin master

(完)

登陆后阅读全文
阅读 2053 赞赏 0 有用 2 没用 0 收藏 0 分享

   



0 条留言

列位于大天的头像

列位于大天

六合八荒唯我独尊

相关文章

PHP上传大文件先是报413 Request Entity Too Large,后$_FILES为空

跨域请求出错 when the request credentials mode is include

Android 智能下拉刷新框架 - SmartRefreshLayout

如何使用 Issue 管理软件项目? (Github)

php composer install 慢 不动 怎么办?

黑客成长技术清单 (GitHub 万星推荐)

全文搜索引擎 ElasticSearch 入门教程

nginx warn upstream response is buffered to a temporary file

ECS默认私网DNS异常导致系统内部无法解析域名(无法打开网站)

如何制作CSR(证书私钥和证书请求文件)文件?

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

【面试107问】谷歌等巨头机器学习面试题:从逻辑回归到智力测验

牛津大学研发类脑光子芯片,运算速度超人脑1000倍

【深度学习框架的未来】李沐:AWS开源端到端AI框架编译器NNVM

【AI拯救爱情】婚姻/恋爱关系垂危,AI帮你重返爱河

【谷歌新项目公开】无需学编程,用手机摄像头和浏览器即可机器学习

手把手搭建游戏AI—如何使用深度学习搞定《流放之路》

4亿欧元的天价收购的DeepMind去年巨亏1.6亿美元,他为谷歌带来了什么?

【ICML+NIPS过去12年数据】机器学习被引次数最高作者Top 20

【大咖解读Bengio笔记】邓侃:用深度学习模型,解构并重构人类思维

深度线性神经网络也能做非线性计算,OpenAI使用进化策略新发现

手机扫一扫
分享文章