如何在 GitHub 發 PR
PR (Pull Request) 的作用在,當你想修改某個你沒有權限的專案(以 GitHub 為例),你可以將此專案 Fork 到自己的資料庫中,當完成某功能後,通知該專案的作者,告知你已修改了某功能,並將修改好的資料給原作者檢查,若他同意則會合併到他的專案中。
一、什麼是發 PR (Pull Request)
在 GitHub 中有很多專案,當你想幫一個專案修改程式碼,但你並非此專案開發者,你可以將這個專案 Fork (類似於拷貝) 到自己的 GitHub 資料庫中,修改後,再向原作者提出 Pull Request
請求 (請原作者拉回去(Pull)的請求(Request)
),通知原作者你修改了他的專案,並希望他合併你的修改。
二、Pull Request 簡易流程
- Fork (類似於拷貝) 別人的專案到自己 Github 資料庫
- Clone 遠端儲存庫到本地端,修改程式碼後,推回遠端 (Push)
- 發 PR 給原作者,通知原作者,你修改了他的程式碼,請他看一下
- 如果原作者覺得可以,則會將你修改的內容合併 (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 也會寄送通知給你
- 完成此次任務啦!!