本页目录

GitHub Branch、Tag、Commit、Pull Request 是什么?工作原理图解

适用范围
需要理解 GitHub 协作流程、准备使用 Git 或参与开源项目的新手
信息来源
木子不写代码 GitHub 零基础教程与 GitHub Docs 的分支、Pull Request、Tag 和 Release 文档

Commit 是一次版本记录,Branch 是可独立推进的开发线,Pull Request 用于提出并审查合并,Tag 给固定提交标记版本,Release 则把该版本包装成面向用户的发布页。理解这条链路,就理解了 GitHub 协作的核心。

GitHub 从分支开发、Pull Request 审查到 Tag 和 Release 的流程

六个概念放在一条流程里

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 提供的发布页,可附带更新说明和安装包。