【GitHub Flow 教學】#03 Code Review 與協作技巧

測驗:Code Review 與協作技巧

共 5 題,點選答案後會立即顯示結果

1. Code Review 的主要目的是什麼?

  • A. 評估開發者的程式能力
  • B. 團隊成員互相檢查代碼,確保品質後才合併
  • C. 讓主管知道誰寫了什麼代碼
  • D. 測試程式碼是否能正常執行

2. GitHub Review 中,「Request Changes」代表什麼意思?

  • A. 我有一些想法,但不阻擋合併
  • B. 看過了,可以合併
  • C. 這裡有問題,改完再合併
  • D. 請其他人來審查

3. 在 GitHub 的「Files changed」分頁中,紅色的行代表什麼?

  • A. 有錯誤的代碼
  • B. 刪除的行
  • C. 新增的行
  • D. 需要修改的行

4. 當審查者給出 Request Changes 後,開發者應該怎麼做?

  • A. 直接合併 PR,忽略審查意見
  • B. 建立一個新的 PR 重新提交
  • C. 刪除這個分支,從頭開始
  • D. 修改代碼後 push 到同一個 branch,回覆留言,等待審查者 Approve

5. 以下哪項是審查者(Reviewer)應該避免的行為?

  • A. 快速回應,不要讓人等太久
  • B. 說明「為什麼」不只是說「不好」
  • C. 批評人而非代碼
  • D. 如果只是風格問題,用 Comment 而非 Request Changes

一句話說明

Code Review 是團隊成員互相檢查代碼,確保品質後才合併。

前置知識

  • 第 1-2 篇:GitHub Flow 概念與 PR 建立
  • 基本 Git 操作

Code Review 是什麼?

當你建立 Pull Request 後,通常不會直接合併。團隊會先「審查」你的代碼,這個過程就是 Code Review。

開發者 A                    開發者 B(審查者)
    |                           |
    |-- 建立 PR --------------->|
    |                           |-- 看代碼
    |                           |-- 留言問問題
    |<-- 收到 Review 意見 ------|
    |                           |
    |-- 修改代碼 ------------->|
    |-- 回覆留言 ------------->|
    |                           |-- 確認 OK
    |                           |-- Approve
    |                           |
    |-------- 合併 PR ---------|
Code language: HTML, XML (xml)

翻譯:Code Review 就像文章發表前請人幫忙看一遍,抓錯字、提建議。


GitHub Review 三種結果

當審查者看完你的 PR 後,會給出三種結果之一:

結果 圖示 意思
Comment 💬 「我有一些想法,但不阻擋合併」
Approve 「看過了,可以合併」
Request Changes 「這裡有問題,改完再合併」

最小範例:審查者的操作畫面

1. 進入 PR 頁面
2. 點選「Files changed」分頁
3. 看完代碼後,點右上角「Review changes」
4. 選擇一種結果 → 送出

翻譯

  • Comment:「我看了,有些想法分享」
  • Approve:「沒問題,請合併」
  • Request Changes:「有問題,先改」

如何審查別人的 PR

第一步:看 PR 描述

## 這個 PR 做了什麼
- 新增登入功能
- 修復密碼驗證 bug

## 測試方式
- 執行 npm test
- 手動測試登入流程
Code language: PHP (php)

檢查點

  • [ ] 知道這個 PR 要解決什麼問題嗎?
  • [ ] 有說明怎麼測試嗎?

第二步:看改了哪些檔案

GitHub 的「Files changed」會顯示所有修改:

# 紅色 = 刪除的行
- const oldCode = "舊的";

# 綠色 = 新增的行
+ const newCode = "新的";
Code language: PHP (php)

翻譯:紅色是「拿掉的」,綠色是「加上的」。

第三步:留言提問或建議

在任何一行代碼旁邊,點「+」號就可以留言:

位置:src/login.js 第 42 行

💬 你的留言:
這裡如果密碼是空的會怎樣?
要不要加個檢查?

留言的常見類型

類型 範例 用途
疑問 「這行是做什麼的?」 不懂的地方
建議 「這裡可以改成 xxx」 有更好的寫法
問題 「這裡會不會出錯?」 發現潛在 bug
讚美 「這個寫法很棒!」 鼓勵隊友

留言小技巧

# 用 suggestion 提供修改建議
# 開發者可以一鍵採用

Code language: PHP (php)
suggestion const result = items.filter(x => x.active);

翻譯:GitHub 有特殊語法,讓你直接建議改成什麼,對方可以一鍵接受。


如何回應 Review 意見

當別人審查你的 PR 後,你會收到通知。回應的方式:

1. 如果同意建議

做法一:直接接受 suggestion(如果有的話)
做法二:自己改代碼 → commit → push

修改後在留言下回覆:

已修改,請再看一下 👍

2. 如果不同意

先解釋你的想法:

這裡我是故意這樣寫的,因為 xxx。
你覺得這樣 OK 嗎?

關鍵:不是吵架,是討論。

3. 修改完成後

1. 在對話串回覆「已修改」
2. 點「Resolve conversation」(解決對話)
3. 等待審查者再次 Review

常見 Review 情境

情境 1:審查者 Request Changes

狀態:❌ Changes requested

你要做的事:
1. 看審查者的留言
2. 修改代碼
3. push 到同一個 branch
4. 回覆留言說「已修改」
5. 等待審查者 Approve

翻譯:他說有問題,你改完再請他看一次。

情境 2:有多個審查者

狀態:
- 審查者 A:✅ Approved
- 審查者 B:❌ Changes requested

你要做的事:
- 通常要等所有人都 Approve 才能合併
- 或依團隊規則(例如:2 人 Approve 即可)

情境 3:審查者只是 Comment

狀態:💬 Commented(沒有 Approve 也沒有 Request Changes)

這代表:
- 他有一些想法,但不阻擋合併
- 你可以決定要不要採納
- 通常還是需要找人正式 Approve

團隊協作最佳實踐

對於審查者(Reviewer)

✅ 該做的:
- 快速回應(不要讓人等太久)
- 說明「為什麼」不只是說「不好」
- 如果只是風格問題,用 Comment 而非 Request Changes

❌ 不該做的:
- 批評人而非代碼(「你怎麼會這樣寫」)
- 吹毛求疵每個小細節
- 拖很久不 Review

對於開發者(Author)

✅ 該做的:
- PR 不要太大(小 PR 容易 Review)
- 寫清楚 PR 描述
- 禮貌回應每個留言

❌ 不該做的:
- 無視 Review 意見直接合併
- 覺得被針對(他是在幫你)
- 一次改太多東西

Vibe Coder 檢查點

審查別人的 PR 時確認:

  • [ ] 我知道這個 PR 要解決什麼問題嗎?
  • [ ] 代碼邏輯有沒有明顯錯誤?
  • [ ] 有不懂的地方就問,不要假裝看懂

被審查時確認:

  • [ ] 每個留言都有回應了嗎?
  • [ ] 修改都 push 了嗎?
  • [ ] Conversation 都 Resolve 了嗎?

總結

角色 主要任務
審查者 看代碼 → 留言 → Approve/Request Changes
開發者 收到意見 → 修改/討論 → 等待 Approve

Code Review 的核心是「互相幫忙讓代碼變更好」,不是「找碴」。

下一篇我們將學習如何處理合併衝突。

進階測驗:Code Review 與協作技巧

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 審查 PR 時的優先順序 情境題

你是團隊的資深開發者,收到一個新人的 PR 請求 Review。這個 PR 有 500 行代碼修改,涉及 15 個檔案,PR 描述只寫了「修復 bug」三個字。你應該如何處理?
  • A. 直接開始審查所有 500 行代碼
  • B. 給予 Approve,因為信任新人的工作
  • C. 先留言請對方補充 PR 描述,說明修復了什麼問題、如何測試
  • D. 直接 Request Changes,要求把 PR 拆成多個小 PR

2. 多審查者情境處理 情境題

你的 PR 目前狀態如下: – 審查者 A:Approved – 審查者 B:Request Changes(指出一個變數命名不清楚) – 審查者 C:Comment(建議可以加個註解,但說不阻擋合併) 你應該怎麼做?
  • A. 因為有一個 Approve 了,可以直接合併
  • B. 處理審查者 B 的變數命名問題,等待他 Approve 後再合併
  • C. 回覆審查者 B 說變數命名是故意的,請他 Approve
  • D. 等三位審查者全部給 Approve 才能合併

3. Review 留言分析 錯誤診斷

審查者在你的 PR 留了以下留言:
「你怎麼會寫出這種代碼?這根本不是專業程式設計師該有的水準。」

這個留言有什麼問題?

  • A. 沒有問題,審查者有權表達意見
  • B. 問題是沒有給具體的修改建議
  • C. 問題是應該用 suggestion 語法
  • D. 批評人而非代碼,違反 Code Review 最佳實踐

4. 處理不同意的 Review 意見 情境題

審查者在你的 PR 留言說:「這裡應該用 forEach 而不是 for 迴圈」。但你認為在這個情況下 for 迴圈效能更好,而且需要用到 break。你應該怎麼回應?
  • A. 直接忽略這個留言,不回應
  • B. 回覆「你不懂,for 迴圈比較好」
  • C. 解釋你的想法:「這裡用 for 是因為需要 break 提早結束,forEach 不支援。你覺得這樣 OK 嗎?」
  • D. 為了避免爭議,改成 forEach

5. PR 合併前的檢查 錯誤診斷

你完成了所有 Review 意見的處理,但合併按鈕仍然是灰色不能點。你檢查了以下狀態:
– 審查者 A:Approved – 審查者 B:Commented (3 天前的留言) – CI 測試:通過 – 所有 Conversation:已 Resolve

最可能的原因是什麼?

  • A. CI 測試雖然顯示通過,但實際上有問題
  • B. 團隊設定需要審查者 B 正式 Approve 才能合併,Comment 不算 Approve
  • C. 留言已經過了 3 天,需要審查者重新 Review
  • D. 需要把所有 Conversation 重新打開再 Resolve 一次

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *