Skip to content

Git 版本控制:时间的后悔药

💡 一句话解释:Git 就是代码世界的游戏存档管理器。它能让你随时“读档”重来,也能让你和队友在各自的“平行宇宙”里互不干扰地开发。

安全说明:本页所有交互组件都是“模拟器”,不会对你电脑上的真实 Git 仓库执行任何操作;但真实项目里建议严格按步骤来,不要依赖“自动下一步”。

0. 最常用的 5 个场景(直接照抄)

如果你只想“立刻能用”,先把这块过一遍:每个场景都是现实工作中最常见的 Git 流程。

常见场景:直接照抄的 Git 命令
选一个场景,按步骤执行;每一步都解释“为什么这么做”。
在本地改代码并提交;这是你 90% 的 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
论文_绝对是最后一次修改版.doc

Git 完美解决了三个问题

  1. 版本混乱:不需要复制副本,一个文件夹搞定所有历史版本。
  2. 无法后悔:删错了代码?一秒钟找回三天前的状态。
  3. 协作冲突:你改了 A 文件,我改了 B 文件,Git 帮我们自动合并。

2. 核心概念:三个箱子

Git 的设计哲学其实很像寄快递

💻
工作区 (Desk)你的书桌,随便乱放
📝
essay.txt
Add +
🖼️
photo.jpg
Add +
🎨
style.css
Add +
git add
📦
暂存区 (Box)快递盒,准备打包
盒子是空的 🕸️
git commit
🗄️
仓库 (Cabinet)档案柜,永久保存
柜子是空的 💨
当前等价命令
$ git status
git 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
状态:分支已创建

💡 工作流程: 初始化 → 提交 → 创建分支 → 开发 → 合并

  1. 修改代码:在工作区写写画画。
  2. git add:挑选你要保存的文件,放入暂存区。
  3. 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:把云端最新的存档拉取到本地。
💻 本地
main Ahead 0 / Behind 0
☁️ 远程
origin/main模拟队友提交在这里发生

💡 远程协作: 你本地落后(Behind)就 pull,你本地领先(Ahead)就 push。