Git 版本控制:时间的后悔药
💡 一句话解释:Git 就是代码世界的游戏存档管理器。它能让你随时“读档”重来,也能让你和队友在各自的“平行宇宙”里互不干扰地开发。
✅ 安全说明:本页所有交互组件都是“模拟器”,不会对你电脑上的真实 Git 仓库执行任何操作;但真实项目里建议严格按步骤来,不要依赖“自动下一步”。
0. 最常用的 5 个场景(直接照抄)
如果你只想“立刻能用”,先把这块过一遍:每个场景都是现实工作中最常见的 Git 流程。
常见场景:直接照抄的 Git 命令
选一个场景,按步骤执行;每一步都解释“为什么这么做”。
Step 1 / 3 看当前状态
git status你通常会看到:
On branch main
Changes not staged for commit:
modified: src/app.js为什么:
先确认“你在哪个分支 + 改了哪些文件”,避免在错误分支提交。
最容易踩坑的 3 件事
- 先看状态再动手:每次操作前先跑一次
git status。 - 只提交“你想提交的东西”:用
git add path精准暂存,别习惯性git add .。 - 撤销要分层:没进暂存 / 进了暂存 / 已经 commit,命令完全不同。
1. 为什么我们需要它?
你是否经历过这种绝望?
text
论文_初稿.doc
论文_修改版.doc
论文_最终版.doc
论文_最终版_打死不改版.doc
论文_绝对是最后一次修改版.docGit 完美解决了三个问题:
- 版本混乱:不需要复制副本,一个文件夹搞定所有历史版本。
- 无法后悔:删错了代码?一秒钟找回三天前的状态。
- 协作冲突:你改了 A 文件,我改了 B 文件,Git 帮我们自动合并。
2. 核心概念:三个箱子
Git 的设计哲学其实很像寄快递。
工作区 (Desk)你的书桌,随便乱放
essay.txt
Add +
photo.jpg
Add +
style.css
Add +
git add
▶
暂存区 (Box)快递盒,准备打包
盒子是空的 🕸️
git commit
▶
仓库 (Cabinet)档案柜,永久保存
柜子是空的 💨
当前等价命令
$ git statusgit status(模拟)
On branch main
Untracked files:
essay.txt
photo.jpg
style.css- 工作区 (Working Dir):你的书桌。你正在这里写代码,想怎么乱改都行。
- 暂存区 (Staging Area):快递盒。你把写好的文件放进去(
git add),准备打包。 - 仓库 (Repository):快递柜。一旦你封箱寄出(
git commit),这个版本就被永久记录下来了。
🔑 关键点:只有提交(Commit)到仓库的内容,才是安全的。工作区里没提交的内容,丢了就真丢了。
3. 基础工作流:存档三步走
日常开发中,你 90% 的时间都在重复这三个动作。
提交数:0
分支:1
状态:分支已创建
💡 工作流程: 初始化 → 提交 → 创建分支 → 开发 → 合并
- 修改代码:在工作区写写画画。
git add:挑选你要保存的文件,放入暂存区。git commit:给这次修改起个名字(比如“修复了登录 Bug”),永久存档。
4. 平行宇宙:分支 (Branch)
这是 Git 最强大的功能。想象你在玩游戏,前面有个大 Boss(上线新功能),你怕打不过导致游戏结束(系统崩溃)。
这时候,你可以开一个分支 (Branch),相当于复制了一个平行世界。
提交: 0分支: 1
💡 分支策略: 并行开发,互不干扰,最后合并
- 主分支 (Main/Master):稳定的线上版本,只有测试通过的代码才能进来。
- 开发分支 (Feature):你的试验田。你在这里炸了地球也没关系,不会影响主分支。
- 合并 (Merge):你在试验田里测试成功了,就把改动“合并”回主分支。
5. 常用命令速查
| 命令 | 作用 | 人话解释 |
|---|---|---|
git init | 初始化 | "我要在这里建个新仓库" |
git status | 查看状态 | "现在书桌上乱不乱?有没有东西没装箱?" |
git add . | 添加所有 | "把桌上所有文件都扔进快递盒" |
git commit -m "..." | 提交 | "封箱!贴上标签,写上这次改了啥" |
git log | 查看历史 | "翻翻以前的日记" |
git checkout -b dev | 以此创建新分支 | "我要去平行宇宙 dev 探险了" |
git checkout main | 切换分支 | "回地球(主分支)看看" |
git merge dev | 合并分支 | "把平行宇宙的成果带回地球" |
6. 进阶:解决冲突与远程协作
当你和队友同时修改了同一个文件的同一行代码,Git 就会懵逼:“我该听谁的?” 这就是冲突 (Conflict)。
1function greet() {
2 console.log('Hi');
3<<<<<<< HEAD
4 console.log('Welcome') // 当前版本
5=======
6 console.log('Greetings') // 传入版本
7>>>>>>>> feature
8 console.log('Bye');
💡 解决冲突: 选择保留哪个版本,或手动编辑合并
此时你需要手动打开文件,保留需要的代码,删除 Git 自动生成的 <<<<<<< 标记,然后重新提交。
至于远程仓库 (Remote)(比如 GitHub/GitLab),它就是云端的备份中心。
git push:把本地存档上传到云端。git pull:把云端最新的存档拉取到本地。
💻 本地
无
⇄
☁️ 远程
无
💡 远程协作: 你本地落后(Behind)就 pull,你本地领先(Ahead)就 push。
