别学 Git 命令了,先搞懂这仨区域:工作区→暂存区→仓库
一句话:Git 的核心不是背命令,是理解工作区、暂存区、仓库这三块地到底在干嘛。这篇用第一次推代码时踩的坑说清楚。
一、没有 Git 之前,我有多慌
昨天我新建了一个项目 lqq_ai,代码写完了,兴奋地准备推到 Gitee。结果折腾了一个多小时才成功。
回头一想,如果没有 Git(或者说没有版本控制),我的项目只会是:
diff
一个文件夹,改来改去,永远不知道:
- 刚才改了什么
- 昨天谁动了哪个文件
- 能不能回到三天前的版本
- 硬盘坏了去哪哭
Git 解决的三个核心痛点:
| 痛点 | Git 的解法 |
|---|---|
| 单机开发,没法多人协作 | 中央仓库(Gitee/GitHub),每人本地 clone 一份,推拉同步 |
| 改坏了回不去,文件丢了没法恢复 | 版本快照,每次 commit 都是一张"照片",随时回退 |
| 开发流程混乱,东改西改分不清 | 暂存区,让你分批、有逻辑地组织每次提交 |
二、git init:把你的文件夹变成"有时光机功能的仓库"
bash
复制
csharp
git init
执行完,项目目录下多了一个 .git 隐藏文件夹。
它是整个仓库的心脏,存着所有版本快照、分支信息、配置记录。改它?不行,一切操作都通过 Git 命令来。
bash
复制
bash
ls -all # 能看到 .git 目录
Windows 用户注意 :Git Bash 本质是 Windows 上的极简 Linux 终端,路径写法和命令风格都是 Unix 的。项目目录右键点 Git Bash Here 就是最方便的操作方式。
三、git add:把文件放进"购物车"
bash
复制
csharp
git add readme.md
执行后,终端会告诉你:
bash
2 insertions # 新增了 2 行
这意味着文件被放进了暂存区(Stage)。暂存区就像一个购物车 ------ 你往里面扔东西,但还没结账。
四、git commit:结账,生成一张永久快照
bash
复制
sql
git commit -m '初始化项目结构'
-m 后面的文字是这次提交的说明。这不是给你自己看的,是你的 Leader / 同事 / 三个月后的你,翻提交历史时看懂"这次到底干了什么"的唯一线索。
认真写,别敷衍。
五、为什么非要 add + commit 两步走?不能一步到位吗?
这是 Git 设计里最优雅的地方。不能一步到位,是故意的。
场景:你在做首页开发
首页需要三个文件:
diff
index.html ← 页面结构
common.css ← 样式
common.js ← 业务逻辑
你当然是分头写这三个文件,对吧?写一个加一个:
bash
复制
csharp
git add index.html
git add common.css
git add common.js
这时候暂存区里攒了三只,但仓库版本没变 ------ 只要还没 commit,一切只是"准备中"。
然后你一次提交:
bash
复制
sql
git commit -m '完成首页页面布局和样式'
这带来了什么好处?
| 好处 | 解释 |
|---|---|
| 逻辑分组 | 一个 commit 对应一个完整功能,不是零散的"保存一下" |
| 可以后悔 | add 完了发现不该加那个文件?git reset 把它从购物车拿出来就行,不影响其他 |
| 提交历史干净 | 看日志时不是满屏"改了一行"、"又改了一行",而是一条条有意义的功能节点 |
口诀:多次 add,一次 commit。
六、git status:任何不确定的时候,先打这个
bash
复制
lua
git status
它会告诉你三件事:
- 哪些文件没被跟踪(untracked)
- 哪些文件在暂存区等着被提交
- 哪些文件改了但还没 add
文件在工作区的三种状态
sql
你写代码的地方(工作区)
↓ git add
暂存区(Stage) ← 购物车
↓ git commit
仓库(Repository) ← 永久存档
| 状态 | 对应位置 | 怎么看 |
|---|---|---|
| Untracked | 工作区,Git 不认识它 | git status 显示红色,文件名前没标记 |
| Staged | 已 add,在暂存区等着 | git status 显示绿色,"to be committed" |
| Modified | 改过了但是没 add | git status 显示红色,"modified" |
最后一行的核心原则就是:
时刻保持仓库干净。 每次
git status都不应该有意外的东西。
七、一个新手必踩的坑:add 了怎么还是 modified?
昨天我就栽在这里。
bash
复制
csharp
git add readme.md
git status
# → 还是 modified!
原因:VS Code 或编辑器在保存时自动改了文件的行尾符(Windows 的 CRLF → Git 期望的 LF),add 完又被改了,所以 Git 又标记为 modified。
修法:执行完 add 立刻 commit,别在中间停着让别人有机会改你的文件。
bash
复制
csharp
git config --global core.autocrlf true # 一劳永逸
git add -A # 把所有变化一次性加入
git commit -m '你的说明'
八、日常开发的标准四步走
bash
复制
csharp
git status # ① 先看看当前状态
git add . # ② 把所有改动加入暂存区
git commit -m '做了什么' # ③ 提交
git push # ④ 推到远程
任何关键时刻,先 git status。 这条命令救过我无数次。
总结
Git 不是用来背的,是用来理解的。
| 概念 | 一句话 |
|---|---|
| 工作区 | 你写代码的地方 |
| 暂存区 | 购物车,攒够了再结账 |
| 仓库 | 每次 commit 生成一张永久快照 |
| add | 放入购物车 |
| commit | 结账,生成快照 |
| status | 看看购物车和架子上都有啥 |
| push | 把本地快照同步到 Gitee/GitHub |
搞懂这三个区域的关系,Git 就掌握了 80%。
第一次推 Gitee 踩坑记 · 2026.05.22