GitHub 該如何發 PR(pull request)
前言
PR 是一個很特別的 GitHub 機制,當然 Gitlab 也有相同的機制,可是我這邊主要只會介紹使用 GitHub 如何發 PR 唷。
pull request
在 GitHub 上有非常多的開源專案,有些專案如果你有興趣也很想要幫忙貢獻自己的力量的時候,就可以使用 pull request (後面簡稱 PR) 這個機制,讓我們先了解一下流程
找到自己喜歡的專案 → Fork 到自己 repository 底下修改 → 修改完畢後推回 (Push) 自己專案底下 → 發 PR 給原作者 → 作者看過沒問題 → 合併 (merge) 到他的專案內
接下來就來實際模擬一下吧!
※ 基本上這邊會用到很多 Git 基礎指令,如果對於 Git 指令不清楚者,可以看我這一篇Git 基礎指令
模擬情境
以下情境都是我拿自己小帳的唷~
(沒事不要發 PR 給我,因為我不會理你 :D )
- 感興趣的專案網址:test-repos
- 專案作者:jc-eng(我的小分身)
- 合作路人:就是我自己
接下來就實際來玩一次吧!
合作路人
第一步驟 Fork 專案
廢話不多說,先進入到我們感興趣的專案 repo,然後點上面 Fork
當你按下 Fork 之後就會出現這個畫面 (影印中…)
第二步驟 Clone下來到本地端修改
首先先取得 Clone 網址(記得一定要在自己 Fork 的 repo 下使用,所以務必確認自己的 repo)
接下來輸入指令 Clone 到本地端
1 | git clone https://github.com/hsiangfeng/test-repos.git |
第三步驟 修改專案
clone 下來後就可以看到多了一個 test-repos
資料夾
點進去後可以看到一個 README.md 檔案,讓我們打開來修改一下
修改完畢後存檔
第四步驟 推回自己專案
基本上因為我們是使用 Clone 下來,所以可以直接 Push 回去,但是輸入以下指令
1 | git add . |
那我們就可以看到自己線上 repo 也更新了
第五步驟 發送 PR
終於到了發 PR 階段,讓我們回到自己專案的線上 repo 畫面,點一下上方 PR
接下來點擊 New pull request
請務必確認自己的修改內容,然後確定一下上方要發 PR 的對象 repo 分支以及自己的 repo 分支是否正確
如果確認沒問題就按下 Create pull request
通常 title 會是你剛剛 commit 的訊息,如果你有什麼特別的話要跟原作者講也可以在下方 Leava comment 留言給他
接下來沒問題就按下 Create pull request
送出之後就會跳到原本作者的 repo PR 畫面,這樣 PR 就發成功囉~
如果分支有任何狀況下方這邊也會提示你
接下來就等作者來看過原始碼有沒有問題,若沒問題就會被 merge 了
專案作者
當你發送 PR 之後專案作者就會收到通知(通常都是 Email),接下來專案作者只需要進入專案,點擊 PR
這邊就可以有哪些人發送了 PR
我們點進去看之後,可以點上方 Commits 來看他的修改了什麼
點進來後可以查看他的修改內容
我們可以看到路人新增了一段話
檢查過沒問題後可以直接按下 Merge pull request
接下來就依照自己決定是否修改合併訊息及內容,若沒問題就可以按下 Confirm merge
按下 Confirm merge 之後也可以看到原本的 OPEN 狀態變成 Merged,這樣就合併成功囉~
回到專案首頁也可以看到路人發送的 PR 也加入到專案內了
但是如果是多個分支呢?
一般來講系統開發的時候都會分成兩個分支 Master (主要分支)、Develop (開發分支),通常系統開發上並不會直接 PR 到 Master,而是發到 Develop,然後測試沒問題後專案作者才會將 Develop 合併進 Master,所以在這邊選擇發 PR 的時候要多加留意一下自己的分支
這一段絕對很模糊,所以實際操作一次給各位看看
第一步驟 指定 Clone 分支
這邊就不再附上 Fork & Clone 畫面了,因為是一樣的…
但是這邊要注意到一件事情 Clone 的時候指令會稍稍不太一樣
1 | git clone -b develop https://github.com/hsiangfeng/test-repos.git |
這樣子才會正確拉到我們要的 develop 分支
改完之後一樣 加入索引 & commit 訊息並 push 出去
第二步驟 檢查 Push 資料
我們可以打開自己的 repo,可以發現 Master 分支並沒有任何變化
接下來切換到 develop,可以發現多了一段我們剛剛 push 的資料
第三步驟 發送 PR
發送 PR 的流程基本上與上面相同,唯獨有一個地方要注意,要記得切換自己分支以及對方分支
切換完畢就可以發 PR 啦,後面流程大致上相同只是會發到對方專案的 develop 分支
發生衝突怎麼辦?
這種狀況其實在兩人以上的專案是非常常見的,但是解決衝突也是一個學習方式
假設我目前 Fork 當前專案
結果過程中有其他人修改同一個檔案內容,而你又要發 PR 回去專案,那你就會得到這個訊息
雖然一樣可以按下 Create pull request,但是你是會得到一個提示是在跟你說 README 檔案現在有衝突
解法有這兩種方法
- 點 Resolve conflicts 線上手痛解決衝突問題 (我跟你保證會等很久,等了快半小時還沒開好…)
- 刪除 Fork 的專案 repo,重新再 Fork 一次 (我推薦這個做法,解決速度最快,程式碼複製出來就好)
這篇也附上發生衝突時的參考解決文章唷:D
所以基本上衝突問題是需要溝通,盡可能減少修改到同一支檔案。
以上都是直接針對開源專案發 PR 流程~