昨天 Day 27 已經實作了 git clone、git fetch、git pull,學會怎麼把 GitHub 上的修改同步到自己的電腦。
那如果今天是我們修改了專案,想把自己的分支合併到正式的 master,又可以怎麼做呢?
所以今天要認識的就是GitHub 的 Pull Request(簡稱:PR),然後實際操作一次。
Pull Request(簡稱 PR)直接翻成中文就是「提出合併請求」。
假設小組專案我們在自己的分支完成修改,想將這些修改加入正式的 master就可以透過 GitHub 建立 Pull Request。
其他協作者透過我建立的Pull Request先查看修改了哪些檔案,然後留下建議或進行 Code Review,確認沒問題後再決定是否合併。
那這裡我就覺得查看修改了哪些檔案這件事不是可以用git fetch 跟 git diff也可以在合併前查看別人修改了甚麼嗎?
所以我把這個想法跟AI說了之後他就做了一個表格:
| 比較項目 | git fetch + git diff |
Pull Request(PR) |
|---|---|---|
| 查看遠端修改 | ✅ 可以 | ✅ 可以 |
| 操作位置 | 本機 Git | GitHub 網頁 |
| 查看 Commit | ✅ 可以 | ✅ 可以 |
| 針對程式碼留言 | 沒有內建審查留言功能 | ✅ 可以 |
| 團隊審查與討論 | 需搭配其他工具 | ✅ 可以 |
| 提出合併請求 | ❌ 不行 | ✅ 可以 |
所以git fetch 負責取得遠端更新,git diff 可以比較修改內容。
Pull Request 是讓團隊成員一起審查、討論,最後決定是否合併分支的流程。
那麼大概了解 Pull Request之後,就從昨天的 sync-practice 分支開始實際操作一次!
等等會依序建立 PR、查看 Files changed、留下 Review Comment,但因為我沒有真的要合併到master所以最後會關閉 PR不是進行合併。
首先進入GitHub的eyes-prj Repository,點選上方的 Pull requests,按下 New pull request。
進入 Compare changes 頁面後,會看到兩個分支選項:
base:準備接收修改的目標分支。
compare:我們想提出合併請求的來源分支。
那預設他們都是master的,所以我們需要將compare切換成sync-practice,選好後,GitHub 就會自動比較兩個分支之間的差異了。
圖片可以看到這些資訊:
Able to merge:目前沒有合併衝突,可以自動合併。
1 commit:這次有一筆 Commit。
1 file changed:修改了一個檔案。
3 additions、0 deletions:新增三行內容,沒有刪除內容。
下方也可以看到昨天新增的 sync-demo.txt和檔案中的修改內容。
確認這些沒問題之後就可以按下Create pull request了。
接著GitHub會讓我們填寫 PR 的標題和說明:
這次的title是他自動幫我填入的Add sync demo file,description就簡單介紹一下這次新增的檔案、修改目的,還有備註這是一個練習用的 PR。
填寫完成後,再按一次 Create pull request就成功建立 PR 了!
建立成功後可以看到這次的 PR #1,狀態顯示 Open代表合併請求已經建立,但還沒有真正合併到 master。

成功建立 PR 後,可以看到上方有幾個頁籤功能分別是:
Conversation:查看 PR 的說明、留言和討論紀錄。
Commits:查看這次 PR 包含哪些 Commit。
Checks:查看自動化檢查的結果。
Files changed:查看這次修改了哪些檔案及內容。
這次我們先查看Files changed,可以看到昨天新增的 sync-demo.txt,還有裡面的三行內容。
其中綠色背景代表新增的內容,可以更直觀的讓我們看到這次修改了什麼。

接下來我們來練習 Code Review就是程式碼審查。
在 Files changed 頁面中,將滑鼠移到想要留言的程式碼行數旁邊就會出現一個 藍色的+ 按鈕。按下去就可以針對那一行留下建議。
那我這次選了第二行然後給的建議是:這裡可以補充修改日期,讓其他協作者更容易追蹤更新紀錄。
這樣就可以針對特定的修改內容提出建議,不只是留下整體的 PR 留言讓人不知道是在講哪裡。
輸入完成後,就會出現兩個主要選項:
Comment:直接發布這則留言。
Start a review:先將留言加入待提交的審查,之後可以一起提交多則建議。
這次我選擇了Start a review,因為我只是要體驗一下完整的 Code Review 流程而已。
完成 Code Review 後,回到 Conversation 頁面,就可以看到剛剛提交的留言已經出現在討論紀錄中。如果這次的修改已經確認沒問題,就可以點擊 Merge pull request,將 sync-practice 的修改合併到 master。
但我前面說過我只是要練習 Pull Request 的操作,我並沒有真的要把測試用的 sync-demo.txt 加入正式專案,所以我點了Close pull request,直接關閉這次的 PR,就可以看到綠色的 Open 變成紅色的 Closed了。
雖然PR 被關閉了,但原本的分支並不會因此被刪除,之前的 Commit、留言和審查紀錄也都會保留下來。
這次雖然沒有真的合併到 master,但還是可以從 GitHub 的 Closed PR 紀錄中找到今天的練習內容!
那今天的實作就到這邊完成了喔!