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 时也觉得多此一举。直到有一次,我同时改了三个不相关的功能,想分开提交——暂存区让我可以精确选择哪些文件进入这次提交。嗯,这个设计很巧妙。
典型的日常流程是这样的:
- 从远程仓库拉取最新代码:
git pull - 在本地工作区修改代码
- 把修改加入暂存区:
git add - 提交到本地仓库:
git commit - 推送到远程仓库:
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 的数据流向。
这张图里,回滚操作就是从「本地仓库」回到「工作区」的那条虚线箭头。你想想看,有了这个机制,任何错误的提交都能被「拉回来」。
2.5 我的日常 Git 习惯
最后分享几个我自己的小习惯,不一定适合所有人,但你可以参考:
- 提交要小、要频繁:每次提交只做一件事。这样回滚时能精确到某个功能点,而不是一大坨代码。
- 提交信息写清楚:别写「fix bug」这种废话。我习惯写「fix: 修复用户登录时 token 过期未刷新问题」,这样回滚时一看就知道该不该回。
- 推送前先拉取:
git pull --rebase是我每天用最多的命令。它能让提交历史保持线性,回滚时更清晰。 - 重要分支加保护:在 GitHub/GitLab 上,把
main分支设为保护分支,不允许直接推送。这个设置救过我很多次。
一个小技巧:如果你不确定某个回滚操作会有什么后果,先创建一个分支试试。比如 git checkout -b test-revert,在这个分支上做回滚实验,没问题了再应用到主分支。
好了,Git 基础就聊到这里。这些概念和命令,是后面所有回滚操作的基石。下一章我们会深入 git revert 和 git reset 的细节——嗯,到时候你会知道为什么我反复强调「优先用 revert」。