如何在 GitHub 發 PR

PR (Pull Request) 的作用在,當你想修改某個你沒有權限的專案(以 GitHub 為例),你可以將此專案 Fork 到自己的資料庫中,當完成某功能後,通知該專案的作者,告知你已修改了某功能,並將修改好的資料給原作者檢查,若他同意則會合併到他的專案中。

一、什麼是發 PR (Pull Request)

在 GitHub 中有很多專案,當你想幫一個專案修改程式碼,但你並非此專案開發者,你可以將這個專案 Fork (類似於拷貝) 到自己的 GitHub 資料庫中,修改後,再向原作者提出 Pull Request 請求 (請原作者拉回去(Pull)的請求(Request)),通知原作者你修改了他的專案,並希望他合併你的修改。

二、Pull Request 簡易流程

  1. Fork (類似於拷貝) 別人的專案到自己 Github 資料庫
  2. Clone 遠端儲存庫到本地端,修改程式碼後,推回遠端 (Push)
  3. 發 PR 給原作者,通知原作者,你修改了他的程式碼,請他看一下
  4. 如果原作者覺得可以,則會將你修改的內容合併 (Merge) 到自己的專案中

三、Pull Request 詳細流程

步驟一: Fork 專案

  • 首先我想要修改 hexschool 的 hexschoolGit 專案,點選右上方 Fork 按鈕,把專案 Fork 到我的 GitHub 資料庫中

  • 按下 Fork 後,會發現自己 GitHub 資料庫中已建立一個同名的專案,上面會註解是由哪個專案 Fork 而來
  • 專案名下會顯示是由哪個專案 Fork 而來

步驟二: 將專案複製到電腦

  • 將自己的專案,使用 Git 指令將專案複製到電腦

  • 複製以下網址後

  • 在終端機使用以下 Git 指令,複製專案到電腦

    1
    $ git clone https://github.com/carol-yang09/hexschoolGit.git

複製專案到電腦後,利用 sourcetree 工具可看到,目前本地端有 master 分支,遠端有 origin/master、origin/dev、origin/HEAD 分支

雖然專案有 dev 分支,但在本地端並沒有,因為使用 git clone 預設只會抓 master 分支下來
可在終端機使用指令

1
$ git checkout dev

利用 GitHub 機制,如果使用 checkout 切換分支時,若本地端找不到此分支,會到遠端找,找到後會自動把遠端分支抓下,如下圖

這時開啟 sourcetree 可以看到本地端多了一個 dev 分支

步驟三: 編輯新功能

  • 因為要開一個新功能,因此切換到 dev 分支後,建立一個 feature/addFile 分支,並切換到此分支 ( 使用 Git flow 流程)

  • 當完成 feature/addFile 分支的功能後,切換到 dev 分支,合併 feature/addFile 至 dev 分支

在 feature/addFile 分支建立好功能,開啟 sourcetree 查看

切換到 dev 分支後,dev 分支合併 feature/addFile 分支後結果

  • 最後使用以下 Git 指令,將最後成果推到送遠端 (注意是推送 dev 分支)

    1
    $ git push origin dev
  • 開啟自己的 GitHub 專案,可看到,遠端 dev 分支已更新

步驟四: 發 PR

  • 在編輯新功能後,可以在自己 Fork 的 GitHub 專案看到,系統詢問你要不要對原作者發出合併請求

  • 按下 compare & pull request 按鈕,發出請求,會跳到對方專案中 pull requests 頁面
  • 寫下申請的標題與內容,最後點擊 create pull request 按鈕

在此要注意,要請求合併對方 dev 分支,而非 master 分支

  • 發送 PR 完成狀態

  • 現在可在對方專案 pull requests 頁面看到自己的請求

步驟五: 查看已發的 PR

  • 當對方同意合併請求後,可在對方專案 pull requests 頁面的 closed,看到自己已被同意的請求

  • 同時 GitHub 也會寄送通知給你

  • 完成此次任務啦!!

評論