2026年5月27日 · 版本控制3 分钟
Pull Request(简称 PR)是 GitHub 协作的核心功能。它允许你向别人的仓库提交代码修改,请求项目维护者合并你的变更。无论你是参与开源项目,还是在团队协作中走 Code Review 流程,提交 PR 都是一项基本功。
本文从零开始,用一个完整的示例带你走一遍提交 PR 的全流程。
在开始之前,确保你已经:
git --version 验证)git config --global user.name "你的用户名"
git config --global user.email "你的邮箱@example.com"假设你想参与贡献的仓库为 https://github.com/gohugoio/hugo。
打开该仓库页面,点击右上角的 Fork 按钮。

Fork 的作用
Fork 会在你的 GitHub 账号下创建一份该仓库的独立副本。你拥有这个副本的读写权限,可以在上面任意修改而不影响原仓库。
点击后 GitHub 会询问 Fork 的归属(个人账号或组织),选择你的个人账号即可。几秒钟后,你就会被重定向到你账号下的仓库副本,URL 会变为:
https://github.com/你的用户名/某项目将 Fork 后的仓库克隆到本地:
git clone https://github.com/你的用户名/某项目.git
cd 某项目关于 HTTPS 与 SSH
如果你配置了 SSH 密钥,建议使用 SSH 地址:
git clone git@github.com:你的用户名/某项目.gitSSH 方式推送代码时无需每次输入密码,比 HTTPS 更方便。
克隆下来的仓库默认只关联了你自己的 Fork(origin)。你需要将原仓库添加为 upstream,以便同步它的最新变更:
git remote add upstream https://github.com/某用户/某项目.git验证远程仓库配置:
git remote -v输出应该类似:
origin https://github.com/你的用户名/某项目.git (fetch)
origin https://github.com/你的用户名/某项目.git (push)
upstream https://github.com/某用户/某项目.git (fetch)
upstream https://github.com/某用户/某项目.git (push)永远不要在 main(或 master)分支上直接修改。基于最新的上游代码创建一个新的功能分支:
# 确保本地 main 是最新的
git checkout main
git pull upstream main
# 创建并切换到功能分支
git checkout -b feature/你的功能描述分支命名建议:
| 场景 | 分支名示例 |
|---|---|
| 修 Bug | fix/login-error |
| 新功能 | feat/user-avatar |
| 文档改进 | docs/api-typo |
| 重构 | refactor/auth-module |
在功能分支上进行你的修改。完成后,将修改提交到本地仓库:
# 查看变更
git status
# 添加文件到暂存区(可以用 . 添加所有,也可以指定具体文件)
git add .
# 提交变更
git commit -m "feat: 添加用户头像上传功能"Commit Message 规范
一个好的提交信息应该简明扼要地说明做了什么以及为什么。推荐使用 Conventional Commits 规范:
<类型>: <简短描述>
<可选:详细描述>常见类型:feat(新功能)、fix(修复)、docs(文档)、refactor(重构)、test(测试)、chore(杂务)。
将本地的功能分支推送到你的 GitHub 仓库(origin):
git push origin feature/你的功能描述如果你是第一次推送该分支,Git 可能会提示你设置上游分支,按提示的命令执行即可:
git push --set-upstream origin feature/你的功能描述推送成功后,打开你的 Fork 仓库页面(https://github.com/你的用户名/某项目),仓库上面会有一个 Contribute 的按钮, 点击它会自动检测到新推送的分支,并显示一个醒目的 Open pull request 按钮。

点击该按钮后,你会进入 PR 创建页面。在这个页面中需要填写以下内容:
简明扼要地概括你的变更内容,例如:
feat: 添加用户头像上传功能详细说明你的修改内容和动机。一个清晰的 PR 描述模板:
## 变更内容
<!-- 简要说明你做了什么修改 -->
## 相关 Issue
<!-- 如果解决了某个 Issue,请在此引用,例如:Closes #123 -->
## 测试说明
<!-- 描述你是如何测试这些修改的 -->
## 截图(可选)
<!-- 如果是 UI 变更,附上前后对比截图 -->bug、enhancement)填写完成后,点击 Create pull request 按钮提交。
Draft PR(草稿 PR)
如果你的 PR 还在进行中,不希望被合并,可以点击 Create pull request 下拉菜单中的 Create draft pull request。草稿状态的 PR 不会被误合并,准备好后可以随时标记为"Ready for review"。
提交 PR 后,项目维护者或其他贡献者会对你的代码进行 Review。他们可能会提出修改意见。
如果有需要修改的地方,不需要关闭 PR 重新提交——直接在同一个功能分支上继续修改即可:
# 在本地功能分支上修改代码
# ... 修改文件 ...
git add .
git commit -m "fix: 根据 Review 修改用户头像上传逻辑"
git push origin feature/你的功能描述推送后,PR 会自动更新,GitHub 会显示你的新提交。所有讨论都保留在同一个 PR 线程中。
如何响应 Review 评论
在 GitHub PR 页面的评论区,你可以逐条回复 Review 意见。对于简单的修改建议,GitHub 支持直接在评论中点击 Commit suggestion 一键应用修改,无需手动操作。
在等待 PR 合并的过程中,原仓库(upstream)可能已经有了新的提交。如果 PR 存在冲突,需要先同步上游代码并解决冲突:
# 同步上游 main 分支
git checkout main
git pull upstream main
# 回到功能分支,合并最新的 main
git checkout feature/你的功能描述
git merge main
# 如果有冲突,解决冲突后提交
git add .
git commit -m "chore: 解决与上游 main 的冲突"
git push origin feature/你的功能描述当 PR 被项目维护者合并后,你的使命就完成了。此时可以清理本地和远程的分支:
# 切换回 main 分支
git checkout main
# 拉取最新代码(包含你刚被合并的修改)
git pull upstream main
# 删除本地功能分支
git branch -d feature/你的功能描述
# 删除远程功能分支
git push origin --delete feature/你的功能描述在 PR Review 过程中,你可能会多次提交修正。如果不想在 PR 中留下过多"修正修正的修正"这类提交,可以在 Review 结束后使用 rebase 合并提交:
# 查看最近的提交记录
git log --oneline
# 交互式 rebase 最近 3 个提交
git rebase -i HEAD~3在打开的编辑器中将次要提交前的 pick 改为 squash(或 s),保存退出后编辑新的提交信息。
何时不该 rebase
只有还没有被其他人拉取的本地提交才适合 rebase。如果分支已经被推送到远程且被协作者查看,rebase 会重写历史,导致混乱。这种情况下请使用 merge 代替。
git checkout feature/你的功能描述
git pull --rebase upstream main
git push --force-with-lease origin feature/你的功能描述--force-with-lease 比 --force 更安全,它会在强制推送前检查远程分支是否被其他人更新过。
如果你的 PR 是为了解决某个 Issue,可以在 PR 描述中使用关键词自动关联:
Closes #123:PR 合并后自动关闭 Issue #123Fixes #456:同上Related to #789:仅关联,不关闭# 1. Fork 目标仓库(在 GitHub 网页上操作)
# 2. 克隆到本地
git clone https://github.com/你的用户名/某项目.git
cd 某项目
# 3. 添加上游仓库
git remote add upstream https://github.com/某用户/某项目.git
# 4. 创建功能分支
git checkout main
git pull upstream main
git checkout -b feature/你的功能描述
# 5. 编写代码,提交
git add .
git commit -m "feat: 你的变更描述"
# 6. 推送到你的 Fork
git push origin feature/你的功能描述
# 7. 在 GitHub 网页上创建 PR
# 8. 根据 Review 修改并推送
git add .
git commit -m "fix: 根据 Review 修改"
git push origin feature/你的功能描述
# 9. PR 合并后清理
git checkout main
git pull upstream main
git branch -d feature/你的功能描述
git push origin --delete feature/你的功能描述提交 PR 的核心流程可以概括为:Fork → Clone → Branch → Commit → Push → PR → Review → Merge。初看步骤不少,但走完一两次后就会变成肌肉记忆。
最后几点提醒:
希望这篇教程能帮你顺利迈出开源贡献的第一步。