版本控制与 Git 工作流

改坏了怎么办? 没版本控制时:复制文件夹叫「项目_备份_周三」「项目_最终版」,改来改去不知道哪个是「能跑的那个」;多人改同一文件更是灾难。有了版本控制,每次改动形成一次提交,可回溯、可对比、可分支开发再合并Git 是当前事实标准。本章讲版本控制的必要性、Git 基本概念(提交、分支、合并、变基)、常见分支策略(Git Flow、GitHub Flow、Trunk-Based),以及如何与协作与 Code Review衔接。

一、版本控制的必要性

版本控制(Version Control)把代码的每次变更记录下来,形成可追溯的历史:谁在什么时候改了什么、为什么改(提交信息)。价值在于:可回溯——改坏了可以回到上一版;可对比——看某次提交具体改了哪些行;可协作——多人并行开发不同功能,通过分支与合并整合;可追溯——出问题时能定位引入问题的提交。

没有版本控制时,要么靠「复制文件夹」备份(容易乱、难合并),要么改同一文件互相覆盖。有了 Git 等工具,每个提交有唯一 ID,分支可以独立演进再合并,冲突由工具辅助解决,协作和发布都有章可循。

二、Git 基本概念:提交、分支、合并、变基

Git 是分布式版本控制系统:每人本地都有完整仓库,可离线提交,再与远程同步。提交(commit)是一次变更的快照,包含改动的文件内容、作者、时间、提交信息;每次提交有一个哈希 ID,形成一条历史链。分支(branch)是指向某次提交的指针,默认有 main(或 master);新建分支即新指针,在分支上提交只移动该指针,不影响其他分支。合并(merge)把两个分支的改动合到一起,产生一次合并提交(或快进);变基(rebase)把当前分支的提交「挪」到目标分支最新提交之后,历史呈一条线,但会改写提交历史,公共分支上慎用。

提交链、分支、合并:main 到 C 分叉,main 进到 E、feature 进到 G,合并产生 M
提交 commit
一次变更的快照,含文件改动、作者、信息、哈希 ID
分支 branch
指向某次提交的指针,在分支上提交只移动该指针
合并 merge
把两分支改动合在一起,产生合并提交或快进
变基 rebase
把当前分支提交挪到目标分支之后,历史呈直线;公共分支慎用

常用命令示例(理解即可,不必背):

# 提交、分支、合并
git add . && git commit -m "feat: add login"
git branch feature/order # 新建分支
git checkout feature/order # 切换分支(或 git switch)
git merge feature/order # 把 feature/order 合并进当前分支
git rebase main # 把当前分支变基到 main 最新提交后
Git 常用命令示例

三、分支策略:Git Flow、GitHub Flow、Trunk-Based

「怎么用分支」没有唯一答案,常见有三种策略,按团队规模和发布节奏选择。

Git Flow
有长期存在的 developmain;功能在 feature/* 开发,完成合并回 develop;发版时从 developrelease/*,测试通过后合并到 main 并打 tag;线上修 bug 用 hotfix/*main 拉出,修完合并回 maindevelop。分支多、流程清晰,适合有固定发版周期、需要严格发布管理的项目。
适合:传统发版、多版本维护、需要 release 分支做测试与修 bug。
GitHub Flow
只有一条主分支 main(始终可部署);功能在 feature/* 开发,通过 Pull Request(PR)合并进 main;没有 develop、release,发版即合并到 main 并部署。简单、适合持续交付、小团队或开源协作。
适合:持续部署、单线主分支、PR 即评审与合并入口。
Trunk-Based Development
所有人尽量在一条主干(trunk,即 main)上提交;功能用短生命周期的分支或直接小步提交到主干,通过「功能开关」控制未完成功能不生效;发布从主干打 tag 或自动部署。分支少、合并频繁、冲突早暴露,依赖自动化测试和 CI。
适合:强 CI/CD、小步提交、希望减少长期分支带来的合并成本。
分支策略对比:Git Flow 多分支,GitHub Flow 单主分支 + PR,Trunk-Based 主干为主

四、协作与 Code Review 的衔接

版本控制不仅管代码,还管协作流程。典型做法:功能在分支开发,完成后不直接合并主分支,而是发起 Pull Request(PR) 或 Merge Request(MR);他人审查代码、提意见,通过后再合并。这样主分支质量有保障、知识通过 Review 传递、问题在合并前暴露。

与 Git 工作流的衔接:小步提交——每个 commit 做一件事、信息写清,便于 Review 和回溯;分支命名约定——如 feature/订单页fix/登录超时,一眼能看出用途;PR 描述——写清改了什么、为什么、如何测,方便审查;合并前更新——把主分支最新改动合并或变基到当前分支,减少冲突、保证合入后通过 CI。Code Review 关注逻辑、可读性、测试与边界情况,版本控制则保证「谁改了什么」可追溯、可回滚。

一句话: 版本控制记录每次变更、可回溯可协作;Git 用提交、分支、合并、变基管理历史与并行开发。分支策略常见有 Git Flow(多分支、develop/release)、GitHub Flow(单 main + PR)、Trunk-Based(主干为主、短分支或功能开关)。协作通过 PR/MR 与 Code Review 衔接,小步提交、清晰分支命名与 PR 描述能让流程更顺。

小贴士: 提交信息建议用「类型: 简短描述」格式,如 feat: 添加订单导出fix: 修复登录超时,便于日后用 git log 和工具生成 Changelog。

五、小结

版本控制提供可追溯、可协作的变更历史;Git 通过提交、分支、合并、变基管理代码演进。分支策略:Git Flow 适合固定发版与多版本维护,GitHub Flow 适合持续交付与 PR 驱动,Trunk-Based 适合强 CI、小步提交。协作时用 PR/MR + Code Review 保证主分支质量并与 Git 工作流衔接。下一章讲代码规范、命名与可读性,把「怎么写容易读、容易维护」落到实处。