Github的Pull Request命令列管理

weixin_34253539發表於2017-07-21

Github 的一大特色就是 Pull Request 功能(簡寫為 PR)。

6380152-67bf3f04d3274132.png
bg2017071801.png

一、Pull Request 是什麼?

Github 官方文件的定義如下。
"Pull Request 是一種通知機制。你修改了他人的程式碼,將你的修改通知原來的作者,希望他合併你的修改,這就是 Pull Request。"
Pull Request 本質上是一種軟體的合作方式,是將涉及不同功能的程式碼,納入主幹的一種流程。這個過程中,還可以進行討論、稽核和修改程式碼。

二、Pull Request 的流程

第一步,你需要把別人的程式碼,克隆到你自己的倉庫,Github 的術語叫做 fork
第二步,在你倉庫的修改後的分支上,按下"New pull request"按鈕。

6380152-e717e9891f0e72b7.png
bg2017071802.png

這時,會進入一個新頁面,有Base 和 Head 兩個選項。Base 是你希望提交變更的目標,Head 是目前包含你的變更的那個分支或倉庫。
6380152-2be401873095a31d.png
bg2017071806.png

第三步,填寫說明,幫助別人理解你的提交,然後按下"create pull request"按鈕即可。
6380152-f456577f8d8571f1.png
bg2017071805.png

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 檔案。
$curlhttps://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

相關文章