2、版本控制基础:Git核心概念(仓库、提交、分支)、Git工作流程、常用Git命令回顾

聊回滚保护,绕不开版本控制。说白了,没有版本控制,回滚就是空中楼阁。我见过太多团队,代码出问题了靠「谁记得上次改了什么」来救火——那场面,惨不忍睹。所以这一章,咱们把 Git 的底子打牢。

2.1 Git 核心概念:仓库、提交、分支

仓库(Repository),就是你的项目文件夹加上 Git 的「小本本」。这个小本本藏在 .git 目录里,记录着每一次变更。我个人习惯,新项目第一件事就是 git init,先把仓库建起来,后面怎么折腾都不怕。

提交(Commit),是 Git 世界的「快照」。每次提交,Git 都会拍一张当前所有文件的照片,并附上一个哈希值作为身份证。你想想看,有了这些快照,回滚不就是「回到某一张照片」那么简单吗?

核心要点:提交不是增量备份,而是完整快照。虽然 Git 内部做了压缩优化,但逻辑上每次提交都是完整的项目状态。

分支(Branch),这个我得多说两句。分支本质就是一个可移动的指针,指向某个提交。默认分支叫 main(以前叫 master)。我在项目中遇到过最经典的场景:线上出 bug 了,从 main 拉一个 hotfix 分支修 bug,修完合并回去,不影响正在开发的新功能。这就是分支的魅力。

我的建议:分支名要见名知意。比如 feature/login、bugfix/issue-123、release/v2.1。别用 test1、aaa 这种名字,三个月后你自己都看不懂。

2.2 Git 工作流程:你每天都在用的套路

Git 的工作流程,说白了就是三个区域之间的文件流转:

  • 工作区(Working Directory):你正在编辑的文件夹
  • 暂存区(Staging Area):准备提交的「候车室」
  • 本地仓库(Local Repository):已经提交的历史记录

为什么会设计暂存区?我刚开始用 Git 时也觉得多此一举。直到有一次,我同时改了三个不相关的功能,想分开提交——暂存区让我可以精确选择哪些文件进入这次提交。嗯,这个设计很巧妙。

典型的日常流程是这样的:

  1. 从远程仓库拉取最新代码:git pull
  2. 在本地工作区修改代码
  3. 把修改加入暂存区:git add
  4. 提交到本地仓库:git commit
  5. 推送到远程仓库:git push

避坑指南:我曾经在 git push 之前忘了 git pull,结果推送被拒绝。更糟的是,我用了 git push --force 覆盖了同事的提交。嗯,那次之后我学会了:--force 是核武器,非必要不使用。

2.3 常用 Git 命令回顾

这里我整理了一份「回滚保护」场景下最常用的命令清单。不用全背,但得知道它们能干什么。

命令 作用 回滚相关场景
git log 查看提交历史 找到要回滚的目标提交
git status 查看当前工作区状态 回滚前确认有没有未提交的修改
git diff 查看文件差异 回滚前确认改动内容
git reset 撤销提交或暂存 回滚到指定提交(有风险)
git revert 通过新提交撤销旧提交 安全回滚(推荐)
git stash 临时保存工作区修改 回滚前暂存未完成的修改
git checkout 切换分支或恢复文件 恢复单个文件到历史版本

重点记住:git revert 和 git reset 的区别。前者是「安全撤销」,会保留历史;后者是「时光倒流」,会抹掉历史。团队协作时,优先用 revert。

2.4 一张图看懂 Git 核心逻辑

下面这张 SVG 图,是我自己画的工作流程示意。你看完应该能理解 Git 的数据流向。

工作区 你正在编辑的代码 暂存区 准备提交的变更 本地仓库 已提交的历史 git add git commit git checkout / git reset / git revert Git 三区工作流 回滚的本质:在本地仓库和历史之间穿梭

这张图里,回滚操作就是从「本地仓库」回到「工作区」的那条虚线箭头。你想想看,有了这个机制,任何错误的提交都能被「拉回来」。

2.5 我的日常 Git 习惯

最后分享几个我自己的小习惯,不一定适合所有人,但你可以参考:

  • 提交要小、要频繁:每次提交只做一件事。这样回滚时能精确到某个功能点,而不是一大坨代码。
  • 提交信息写清楚:别写「fix bug」这种废话。我习惯写「fix: 修复用户登录时 token 过期未刷新问题」,这样回滚时一看就知道该不该回。
  • 推送前先拉取:git pull --rebase 是我每天用最多的命令。它能让提交历史保持线性,回滚时更清晰。
  • 重要分支加保护:在 GitHub/GitLab 上,把 main 分支设为保护分支,不允许直接推送。这个设置救过我很多次。

一个小技巧:如果你不确定某个回滚操作会有什么后果,先创建一个分支试试。比如 git checkout -b test-revert,在这个分支上做回滚实验,没问题了再应用到主分支。

好了,Git 基础就聊到这里。这些概念和命令,是后面所有回滚操作的基石。下一章我们会深入 git revert 和 git reset 的细节——嗯,到时候你会知道为什么我反复强调「优先用 revert」。

可可精品资料库