Gitee从入门到精通:手把手教你用代码管理生活(5)

1 阅读7分钟

第5篇:Pull Request:邀请别人“审查作业”——优雅地合并代码,保证质量

📝 场景引入

小白:“我在 "feature-blog" 分支里把博客功能做好了,怎么把它放进 "main" 里?直接把文件复制过去吗?” 爱好者:“千万别!那样会丢掉所有的提交记录和历史。你需要 Pull Request(PR)——像交作业一样提交你的代码,请人帮你检查,然后优雅地合并。” 真实痛点:

  • 直接合并分支,不小心引入了bug,却不知道是谁、哪次提交造成的
  • 自己没发现的错误,别人一眼就能看出来
  • 想把多个人的修改有条理地整合在一起

PR 就是 Git 协作的“质检关卡”。

📥 核心概念(比喻版)

什么是 Pull Request?

想象你在写小组论文:

  • 分支 = 你负责的那一章草稿
  • main 分支 = 最终要交的完整论文
  • Pull Request = 提交草稿给组长审阅
    1. 你说:“我写完了这一章,请帮我看看”
    2. 组长检查:格式对不对?内容有没有矛盾?
    3. 没问题 → 批准并入最终论文
    4. 有问题 → 打回来让你修改

Gitee 的 PR 同理:

“嗨,我把新功能做在这个分支里了,请审查一下,没问题的话就合并进主分支吧。” 为什么必须用 PR?

  • 质量控制:有人帮你挑错,减少 bug
  • 知识共享:别人知道你做了什么,怎么做的
  • 历史清晰:每一个合并都有据可查,可追溯
  • 讨论记录:关于这段代码的所有讨论都保存在 PR 里

一句话:PR 是把“一个人的代码”变成“团队的代码”的仪式。

🚀 手把手教学:创建你的第一个 PR

前提条件

  1. 你已经在分支里做了些修改(比如我们在第3篇的 "feature-night-mode")
  2. 并且已经 "git push" 到了 Gitee

步骤1:进入仓库,发起 PR

  1. 打开你的 Gitee 仓库页面
  2. 在上方导航栏找到 “Pull Requests”
  3. 点击 “新建 Pull Request” 按钮

你会看到一个比较页面:

+------------------------------------------------+ | 新建 Pull Request | +------------------------------------------------+ | 源分支: [你的用户名/my-knowledge-garden:feature-night-mode] ← 你的改动在这里 | 目标分支: [你的用户名/my-knowledge-garden:main] ← 要合到哪里去 | | | 比较结果: | | 可以自动合并 | | 1个提交,改变了1个文件 | +------------------------------------------------+

步骤2:填写 PR 信息

这是最关键的一步,决定了别人愿不愿意、能不能看懂你的代码。

标题:要像新闻标题一样清晰

❌ 差:“更新了一些东西”

✅ 好:“✨ 添加夜间模式切换按钮”

描述:用模板填充,清晰明了

🎯 做了什么

  • index.html 中添加夜间模式切换按钮
  • 点击按钮会将背景设为深色、文字设为白色

🔧 测试方法

  1. 打开首页
  2. 点击“🌙 夜间模式”按钮
  3. 观察页面是否变暗

📸 预览截图

(如果有UI改动,最好贴一张图)

✅ 关联 Issue

关闭 #5 (夜间模式需求)

关键词解释:

"关闭 #5":当 PR 合并后,Issue #5 会自动被关闭(超方便!)

步骤3:提交 PR

点击 “创建 Pull Request”,你的作业就上交了!

👀 模拟审查:如果你有协作者

假设你的朋友来审查你的 PR,他会看到:

  1. 文件变动(Files changed):逐行高亮显示你改了哪里
    • 绿色 "+" 表示新增
    • 红色 "-" 表示删除
  2. 发表评论:鼠标悬停在某一行,点“+”气泡就可以写评语
    • “这个函数名可以更清楚一点”
    • “这里少了个分号,会报错哦”
  3. 审批状态:
    • ✅ 通过(Approve)
    • 💬 评论(Comment)
    • ❌ 驳回(Request changes)

这就是 Code Review(代码审查)——让代码变得更好的过程。

✅ 自己审查并合并

作为个人项目,你可能既是作者又是审查者,流程依然有价值:

  1. 检查改动:在“文件变动”里再看一遍自己写了什么
  2. 自我提问:
    • 这些改动安全吗?
    • 有没有不该上传的密码、密钥?
    • 代码风格统一吗?
  3. 合并 PR:
    • 点击 “合并 Pull Request”
    • 选择合并方式(默认“Merge”即可)
    • 填写合并提交信息
  4. 删除分支:合并后可以顺手删除远程分支(Gitee 会提示你)

合并后的效果:

"main" 分支现在有了夜间模式代码

"feature-night-mode" 分支的历史被融入主线

  • Issue #5 自动关闭
  • 所有记录永久可查

🧩 应用到“知识星球”:PR 工作流示例

典型的一次功能开发闭环

  1. Issue #7:✨ 添加收藏夹页面
  2. 创建分支 "feature-favorites" 并开发
  3. 完成开发 → 推送分支 → 创建 PR
  4. PR 标题:“✨ 实现收藏夹基础页面”
  5. PR 描述:“新增 favorites.html,含静态列表。关闭 #7”
  6. 自我审查或请朋友审查
  7. 合并 PR,删除 "feature-favorites" 分支

如果审查发现了问题?

  • 直接在原分支上修改: "git add" → "git commit" → "git push"
  • PR 会自动更新,无需新建
  • 审查者再次查看,确认无误后合并

这就是迭代改进:提交 → 反馈 → 修正 → 通过。

⚠️ 常见问题与误区

Q1:PR 只能在两个人之间用吗?

完全不是。单人项目也用 PR:

  • 强迫自己再读一遍代码
  • 留下清晰的合并记录
  • 熟悉标准协作流程,为以后团队合作打基础

Q2:PR 和 Merge 有什么区别?

  • Merge(合并):是 Git 的操作命令,单纯把代码合到一起
  • Pull Request:是一整套流程和界面,包含审查、讨论、自动化等

Q3:PR 创建后发现目标分支错了?

可以修改:在 PR 页面侧边栏可以重新选择“目标分支”。

Q4:冲突(Conflict)怎么办?

如果 PR 无法自动合并,Gitee 会提示“存在冲突”,你需要:

在本地切换到该分支,拉取最新main并合并

git switch feature-xxx git fetch origin main git merge origin/main

手动解决冲突后

git add . git commit -m "解决合并冲突" git push

常见误区:

  • 误区:PR 标题随便写后果:几个月后看历史,完全不知道这个 PR 是干嘛的
  • 误区:一个 PR 包含五个不相关的功能后果:审查困难,回滚麻烦
  • 误区:合并后从不删分支后果:仓库里堆满僵尸分支,越来越乱

📝 今日收获总结

✅ 理解 PR 的价值:代码的“质检站” + “讨论室”

✅ 学会创建 PR:选源分支、目标分支,写清晰描述

✅ 掌握 PR 描述模板:做了什么、怎么测、关联 Issue

✅ 体验审查视角:查看文件变动,理解 Code Review

✅ 完成合并闭环:合并 PR → 自动关 Issue → 删分支

你的工作流升级了:

想法 → Issue → 分支开发 → 推送 → PR审查 → 合并 → 删分支

这才是现代开发的规范节奏。

🔮 下篇预告 & 思考题

下篇预告:《Wiki:项目的“说明书”》

代码写好了,别人(或未来的你)怎么知道怎么用?下一篇学 Wiki——为你的知识星球写一份漂亮的说明书,让项目真正“可传承”。 你将学到:

  • Wiki 是什么,为什么比 README 更强大
  • 如何用 Markdown 编写项目文档
  • 组织 Wiki 的最佳实践

今日思考题:

  1. 如果你要给朋友展示你的知识星球项目,你最希望在 PR 描述里写清楚哪三点?
  2. 为什么说“写好 PR 描述,是对未来自己的仁慈”?

动手小任务:

  1. 为你的知识星球做一个很小的改动(比如改一下标题文字)
  2. 走完整套流程:
    • 切新分支 → 修改 → 提交 → 推送
    • 在 Gitee 创建 PR,认真写标题和描述
    • 审查自己的改动,然后合并并删除分支
  3. 观察合并后,对应的 Issue 是否自动关闭了。

📖 延伸资源

  1. Gitee PR 文档:"gitee.com/help/articl…" (gitee.com/help/articl…)
  2. 如何写好 PR 描述:
    • 动机:为什么要做这个改动?
    • 做法:主要改了哪些地方?
    • 测试:怎么验证它是对的?
  3. 代码审查清单(Checklist):
    • 代码能运行吗?
    • 有注释吗?
    • 有没有敏感信息泄露?

好的代码不只在于它能跑,还在于别人能看懂你为什么这么写。 PR 就是你讲述这段代码故事的地方。 下一节,我们给你的项目配上说明书,让它会说话 📚