GitHub Branch、Tag、Commit、Pull Request 是什么?工作原理图解
- 适用范围
- 需要理解 GitHub 协作流程、准备使用 Git 或参与开源项目的新手
- 信息来源
- 木子不写代码 GitHub 零基础教程与 GitHub Docs 的分支、Pull Request、Tag 和 Release 文档
Commit 是一次版本记录,Branch 是可独立推进的开发线,Pull Request 用于提出并审查合并,Tag 给固定提交标记版本,Release 则把该版本包装成面向用户的发布页。理解这条链路,就理解了 GitHub 协作的核心。

六个概念放在一条流程里
main 上已有 Commit
↓ 创建分支
feature/login 上继续 Commit
↓ 提交 Pull Request
代码审查、测试、讨论
↓ Merge
main 获得新功能
↓ 创建 Tag
发布 GitHub Release
| 概念 | 核心作用 | 是否会变化 |
|---|---|---|
| Commit | 保存某一时刻的改动与说明 | 内容固定 |
| Branch | 指向一串提交的开发线 | 随新提交向前移动 |
| Pull Request | 比较、讨论和审查一组改动 | 审查期间持续更新 |
| Merge | 把一条分支的改动合入另一条 | 产生合并结果 |
| Tag | 给一个固定提交命名 | 通常发布后不移动 |
| Release | 面向用户发布版本说明和文件 | 可补充说明与附件 |
Commit:一次可追踪的版本保存
Commit 不只是“保存文件”。它会记录改动、作者、时间、说明和父提交,因此可以回答“谁在什么时候改了什么”。好的提交说明应描述目的,例如:
fix: correct login redirect
feat: add PDF export
docs: update installation guide
这些前缀是常见约定,不是 GitHub 强制规则。仓库如果有 CONTRIBUTING.md,应优先遵守项目自己的要求。
Branch:让多人和多个功能并行推进
默认分支通常叫 main。开发新功能或修复问题时,从 main 创建新分支,在新分支提交修改,不会立即影响稳定分支。
常见分支名:
feat/export-pdf:开发 PDF 导出;fix/login-timeout:修复登录超时;docs/windows-install:更新 Windows 文档。
分支解决的是并行工作和风险隔离。它不等于完整复制一个新仓库;后者是 Fork。
Pull Request:先展示差异,再决定是否合并
Pull Request,简称 PR,是一次变更提案。创建 PR 后,GitHub 会显示:
- 从哪个分支合并到哪个分支;
- 新增、删除和修改了哪些行;
- 自动测试是否通过;
- 审查者提出的问题和建议;
- 后续补充提交。
审查通过后才执行 Merge。存在问题时可以要求修改或关闭 PR,所以“提交 PR”不等于“已经进入主分支”。
Tag 和 Release:固定版本与正式发布
Branch 会继续向前移动,Tag 通常固定指向某个 Commit。常见版本号 v2.5.23 可以按语义化版本理解为:主版本、次版本、修订版本,但项目也可能采用自己的命名规则。
GitHub Release 通常基于 Tag 创建,页面可包含:
- 本次新增功能和修复;
- 升级注意事项;
- Windows、macOS、Linux 安装包;
- 源码压缩包和校验信息。
想安装软件时应优先检查 Release,而不是随意下载默认分支的源代码。四种获取方式详见 Release、ZIP、Clone、Fork 对比。准备自己发布版本,可以继续阅读 如何开源第一个 GitHub 项目。完整术语路线见 GitHub 零基础教程。
使用边界:不同团队会采用不同的分支保护、审查和发布规则;本文解释通用模型,不代表每个仓库的具体贡献规范。
常见问题
Branch 和 Fork 有什么区别?
Branch 是同一个仓库内的一条开发线,Fork 是自己账户下的独立仓库副本。没有原仓库写权限时,常用 Fork 加 Branch 提交贡献。
Pull Request 是把代码直接合并了吗?
不是。Pull Request 是提出变更、展示差异并请求审查的过程,维护者可以讨论、要求修改、合并或关闭。
Tag 和 Release 有什么区别?
Tag 是指向固定提交的 Git 引用;Release 是 GitHub 基于 Tag 提供的发布页,可附带更新说明和安装包。