在GitHub上,Pull Request(簡稱PR)是開發者向項目倉庫提交代碼修改的重要方式。簡單來說,當你完成了新功能開發或問題修復,希望將這些修改合併到項目的主分支(比如main或master)時,就可以通過發起PR來實現。PR能讓項目的維護者和團隊成員看到你的修改,共同審查代碼質量,確保修改安全且符合項目規範。
爲什麼需要PR?¶
- 代碼審查:PR是團隊協作的核心機制,其他人可以通過你的代碼提交了解修改內容,提出建議或批評,避免直接合並“帶病”代碼到主分支。
- 歷史記錄:PR會記錄所有修改的上下文(如修改目的、測試結果),方便後續追蹤和回溯。
- 規範協作:通過PR流程,團隊可以統一代碼風格、測試標準和提交規範,減少混亂。
發起PR前的準備工作¶
在創建PR前,需要確保本地代碼已經準備妥當,避免因基礎問題導致PR失敗。具體步驟如下:
- 提交本地修改
假設你在本地開發分支(如feature/new-login)完成了功能開發,需先將修改提交到本地倉庫:
git add . # 添加所有修改文件
git commit -m "Add user login form validation" # 提交併填寫清晰的提交信息
- 更新分支(避免衝突)
如果項目主分支(如main)有新的更新(比如其他開發者合併了代碼),需先同步到你的分支,確保本地分支是最新的:
git checkout main # 切換到主分支
git pull origin main # 拉取主分支最新代碼
git checkout feature/new-login # 切回自己的分支
git merge main # 將主分支的更新合併到你的分支
若合併時出現衝突(如同一文件被多人修改),需手動解決衝突後再次提交。
- 確認提交狀態
執行git log檢查提交記錄,確保所有修改已正確提交且分支狀態乾淨(無未暫存的修改)。
在GitHub上創建PR的步驟¶
完成本地準備後,即可在GitHub倉庫頁面發起PR,具體操作如下:
-
進入PR創建頁面
打開目標倉庫(如你fork的倉庫或團隊共享倉庫),點擊頁面頂部的“Pull requests”標籤,然後點擊“New pull request”按鈕。 -
選擇分支
- Base分支:選擇你希望合併到的目標分支(通常是項目主分支,如main)。
- Compare分支:選擇你修改的分支(如feature/new-login)。
GitHub會自動檢查分支是否有衝突,若有衝突會提示“Can’t create a merge…”,此時需回到本地解決衝突(參考上文“更新分支”步驟)。 -
填寫PR信息
確認分支無誤後,點擊“Create pull request”進入PR詳情頁,填寫以下關鍵信息:
- 標題:簡潔明瞭,如“Add user login form validation”。
- 描述:詳細說明修改目的(如“修復用戶反饋的登錄失敗問題”)、具體實現(如“新增手機號驗證碼登錄方式”)、測試結果(如“已在本地測試通過”)。
- 關聯Issue:若項目用Issue跟蹤問題,可在描述中填寫“Fixes #123”(#123爲Issue編號),合併PR時會自動關閉該Issue。
代碼審查與修改反饋¶
提交PR後,項目維護者或團隊成員會收到通知,他們會通過評論提出修改意見(如“變量名需更清晰”“缺少單元測試”)。此時你需要:
- 根據反饋修改代碼:在本地分支中調整代碼,再次提交修改(
git commit -m "Fix review comments")。 - 更新PR:提交後,GitHub會自動刷新PR頁面,顯示最新修改狀態。
- 回覆與溝通:對審查意見逐一回復(如“已修改變量名爲
user_phone”),確保溝通順暢。
合併PR的方法¶
當所有審查意見通過後,即可合併PR到目標分支。GitHub提供三種合併方式,初學者推薦使用:
-
Squash and merge(推薦)
將你PR中的所有提交壓縮爲一個提交,保持目標分支歷史簡潔。適合小型修改,避免雜亂的提交記錄。
操作:點擊PR頁面右側的“Merge pull request”,選擇“Squash and merge”,確認合併後點擊“Confirm squash and merge”。 -
Rebase and merge
將你的分支提交“重放”到目標分支頂部,形成線性歷史。適合複雜分支合併,但需謹慎使用(可能修改歷史)。 -
Create a merge commit
保留所有提交記錄,創建一個新的合併提交。適合大型PR或需完整保留提交歷史的場景。
合併後的後續操作¶
PR合併後,可執行以下步驟保持倉庫整潔:
- 刪除源分支:在PR頁面點擊“Delete branch”,刪除已合併的分支(如
feature/new-login),避免倉庫分支冗餘。 - 同步本地分支:若你後續還需開發,可刪除本地分支並重新拉取主分支:
git checkout main
git pull origin main
git branch -d feature/new-login # 刪除本地分支
常見問題與注意事項¶
- 分支命名規範:給分支起有意義的名字(如
bugfix/login-error),避免使用無意義的feature或dev。 - 提交信息清晰:每次
git commit的信息需簡潔,說明修改目的(如“Fix: 修復移動端適配問題”)。 - 小而聚焦的PR:儘量讓每個PR只解決一個問題,避免大PR(超過500行代碼)導致審查困難。
- 衝突處理:若合併時提示衝突,優先在本地解決(
git merge或git rebase),再提交修改。
通過以上步驟,你就能熟練在GitHub上發起PR,實現安全、規範的代碼協作。記住,PR不僅是提交代碼的流程,更是團隊溝通和代碼質量保障的重要環節。