Pull-Request

一句話定義

請求把我的 branch 合併到專案的主分支」——託管平台(GitHub / GitLab / Bitbucket / Gitea)在 Git 之上加的 code review + 合併介面層;不是 Git 原生功能,是社交化協作機制。

核心要點

命名邏輯

PR 的核心隱喻:主分支屬於專案 / feature branch 屬於個人——即使同一人擁有兩者,在這兩個分支上他扮演不同角色。

Pull Request 的意思是:request 這個項目的主人把我這個新的分支的改變給 pull 到這個項目裡去——所以叫 pull request。」(2026-05-01-十分鐘GitHub工作流

GitLab 用 Merge Request(MR)——同一機制不同稱呼,強調的是「合併」動作而非「拉取」隱喻。Bitbucket / Gitea / Codeberg 都沿用 PR / MR 名稱。

PR 在工作流中的位置

對位 GitHub工作流 七步 happy path:

clone → checkout -b → diff → add → commit → push → 【PR ←──── 你在這裡】── 合併

PR 是 push 之後、合併進 main 之前的那一步——接收 review、討論、調整、最終合併的介面。

合併策略選擇(GitHub 預設三選一)

策略feature branch 多 commit 進 main 後變成適用情境
Squash and MergeGitHub工作流 預設一個 clean commitfeature branch 開發過程亂、main 要乾淨;目標:main 每個 commit 都是正常工作的
Create a Merge Commit全部 commit 保留 + 一個 merge commit想保留 feature 開發過程歷史
Rebase and Merge全部 commit 保留為線性追加feature branch 已是乾淨的 commit-by-commit 故事

為何 squash 是預設:feature branch 常含 fix typo / 格式調整 / debug 嘗試等雜訊 commit;這些不該污染 main 的 history。Squash 把這些收斂成單一作者外觀——對位 程式碼風格指南 Golden Rule「每一行程式都看起來像同一個人寫的」在 commit history 層的具體執行。

PR 是 code review 的機構化介面

PR 不只是合併按鈕,更是結構化的 review 場域

  • diff 視圖 — 自動以檔案 / 行為單位呈現改動
  • 行內評論 — 在具體哪一行哪個變數討論
  • change request — 阻擋合併直到問題解決
  • CI 狀態 — 測試 / lint / type check 結果直接顯示,紅燈擋合併
  • 討論記錄 — 為什麼這樣寫的決策歷史被永久保存

對位 程式碼風格指南PR 是 style guide 的最後一道把關」:再短的 style guide 也需要 review 時人 / hook 確認。

2026-05-06-Google-Code-Review 補上 PR 介面背後的判準:reviewer 不是在 diff 上追求完美,而是在 design / functionality / complexity / tests / naming / comments / style / docs / context 等面向判斷這個 PR 是否讓 codebase health 整體變好。

Force Push 與 PR 互動

git rebase main 後本地 commit hash 改變 → 必須 git push origin myfeature -f。GitHub PR 介面會自動更新為新的 commits 列表(同一 PR 號碼),但既有的 review 評論可能變成「outdated」狀態——因為它們指向舊 hash 的具體行。

開源專案的 PR 文化

PR 也是開源協作的標準介面:

  • 任何 GitHub 用戶都可 fork 公開倉庫 → 改 → 開 PR 給原作者
  • 原作者透過 PR 討論決定接 / 不接 / 怎麼改
  • CONTRIBUTING.md / Issue Templates / DCO 簽署等都是這個介面的禮儀層

這與「個人 / 公司專案的 PR」是同一機制不同尺度——個人專案 PR 主要是自我紀律與 CI 把關 / 開源專案 PR 多了外部貢獻者把關這層。

與其他概念的關係

  • Code-Review — PR 是 code review 的機構化介面;Code-Review 補的是 approval 標準、審查面向、comment 寫法與衝突處理。
  • GitHub工作流 — PR 是這套工作流的第七步 + 合併環節;本概念的最完整應用上下文。
  • Git — PR 不是 Git 原生功能;是託管平台層在 Git 之上加的社交化機制。底層動作仍是 git merge / rebase。
  • GitHub — GitHub 發明 / 推廣 PR 機制;現已成跨平台事實標準(GitLab MR / Bitbucket PR / Gitea PR / Codeberg PR 都源自此設計)。
  • 程式碼風格指南 — PR 是 style guide 的最後一道把關;squash-merge 對位 Golden Rule「每一行程式都看起來像同一個人寫的」在 commit history 層的具體執行。
  • AI輔助開發AI 自動 PR reviewClaude-Code 教程列出的代表性企業級用例;PR 介面是 AI agent 與人類團隊的標準交接點。
  • Claude-Code — Claude Code 教程明確列「自動 PR review」為企業級用例;GitHub MCP server 讓 Claude Code 能讀 PR / 寫 review / 開 PR。

相關來源

  • 2026-05-01-十分鐘GitHub工作流 — vault 中第一份系統處理 PR 的來源;含命名邏輯(主分支 vs feature branch 角色分離)+ Squash-merge 預設選擇 + 合併後刪除遠端 branch + 同步本地 main 完整流程
  • 2026-05-06-Google-Code-Review — 補入 PR 作為 code review 場域時的判準:better not perfect / Nit / every line / context / response time / pushback

備註

建頁理由:PR 是 vault 中 AI輔助開發 多次提到但未深入的概念(Claude-Code 教程明確以「自動 PR review」為企業級用例);累積到第一份完整流程來源時建獨立概念頁。理由:(1) 不是 Git 原生機制,須與 Git 分開;(2) 是跨平台事實標準(不只 GitHub),併入 GitHub entity 會限縮視角;(3) 累積方向多元(AI agent 自動 review、stacked PRs、CI 整合、開源 PR 文化等)。

未來累積方向:(a) AI agent 自動 PR 流程(Claude Code / Cursor / Aider 的具體實踐);(b) Stacked PRs / Graphite / Spr 等進階管理工具;(c) Conventional Commits / semantic-release 等規範與 PR 的整合;(d) 開源專案的 PR 禮儀(CONTRIBUTING / DCO / signed commits);(e) Branch protection rules / required reviews / CODEOWNERS 等治理層機制;(f) 不同合併策略的具體權衡案例累積。