Github的Pull Request命令列管理
Github 的一大特色就是 Pull Request 功能(簡寫為 PR)。

一、Pull Request 是什麼?
Github 官方文件的定義如下。
"Pull Request 是一種通知機制。你修改了他人的程式碼,將你的修改通知原來的作者,希望他合併你的修改,這就是 Pull Request。"
Pull Request 本質上是一種軟體的合作方式,是將涉及不同功能的程式碼,納入主幹的一種流程。這個過程中,還可以進行討論、稽核和修改程式碼。
二、Pull Request 的流程
第一步,你需要把別人的程式碼,克隆到你自己的倉庫,Github 的術語叫做 fork。
第二步,在你倉庫的修改後的分支上,按下"New pull request"按鈕。bg2017071802.png
這時,會進入一個新頁面,有Base 和 Head 兩個選項。Base 是你希望提交變更的目標,Head 是目前包含你的變更的那個分支或倉庫。bg2017071806.png
第三步,填寫說明,幫助別人理解你的提交,然後按下"create pull request"按鈕即可。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
相關文章
- 使用git處理github中提交有衝突的pull requestGithub
- Git Fork Pull Request(PR)和Merge Request(MR)Git
- [譯] Pull request review 的十大錯誤View
- 如何將 Bitbucket 的 pull request 簽出到本地 reviewView
- Git如何合併一個已經在GitHub上提交但沒有合併的Pull Request請求Github
- Dart + GitHub Actions:將 Windows/macOS/Linux 的命令列工具釋出到 GitHub ReleasesDartGithubWindowsMacLinux命令列
- 命令列的藝術 (GitHub 星標 6 萬多)命令列Github
- GitHub Draft Pull請求支援新的協作流程GithubRaft
- GitHub Desktop 3.0:幫你更好地整合 pull requestsGithub
- 基於命令列的工作管理員 Taskwarrior命令列
- 【Git】fork遠端倉庫,fork倉庫同步和提交pull requestGit
- Cypress系列(68)- request() 命令詳解
- Pet:一個簡單的命令列片段管理器命令列
- scoop——強大的Windows命令列包管理工具OOPWindows命令列
- 解放雙手!推薦一款 GitHub 星標 8.2k+的命令列軟體管理器,非常酷炫!Github命令列
- windows命令列命令Windows命令列
- cmd 命令列 命令命令列
- git命令列命令Git命令列
- 收集 Linux 命令列執行的命令Linux命令列
- GitHub:原始碼管理的利器Github原始碼
- 網路裝置配置與管理————10、命令列介面命令列
- Git常用的命令列Git命令列
- PDF 的命令列操作命令列
- CloudFoundry命令列和Kubernetes命令列的Restful API消費方式Cloud命令列RESTAPI
- Ubuntu 秘笈之命令列下管理瀏覽器書籤Ubuntu命令列瀏覽器
- github使用命令總結Github
- gitHub_3 git操作命令Github
- JDK常用的命令列工具JDK命令列
- 命令列中的世界盃命令列
- Flutter的命令列除錯Flutter命令列除錯
- 命令列中的常用操作命令列
- 用 nodejs 寫一個命令列工具 :建立 react 元件的命令列工具NodeJS命令列React元件
- Linux命令列Linux命令列
- Shell命令列命令列
- (轉載)git pull origin master與git pull --rebase origin master的區別GitAST
- Git撤銷本次pull rebase(變基) 回退到pull前的程式碼Git
- Linux命令列下進行時間管理,四種方式完成!Linux命令列
- Dry:一個命令列互動式 Docker 容器管理器命令列Docker
- JB的git之旅-git命令列Git命令列