别学 Git 命令了,先搞懂这仨区域:工作区→暂存区→仓库

别学 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

它会告诉你三件事:

  1. 哪些文件没被跟踪(untracked)
  2. 哪些文件在暂存区等着被提交
  3. 哪些文件改了但还没 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

相关推荐
透明的玻璃杯3 小时前
git应用
git
炸炸鱼.4 小时前
Git+Jenkins实战(一):从零搭建自动化发布与回滚系统(附完整代码)
git·jenkins
言6666 小时前
要忽略前端依赖包node_modules的文件在目录下 git暂存区消失
git
胡小禾7 小时前
Git Worktree
git
程序员小羊!7 小时前
18 GIt
git
怣疯knight7 小时前
Git 本地分支关联远程分支 常用命令汇总
git
ANNENBERG8 小时前
git分支开发管理
git
坤坤藤椒牛肉面8 小时前
GIT的使用
git
w3296362718 小时前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git
我家媳妇儿萌哒哒1 天前
git:无法推送refs到远端。您可以试着运行“拉取”功能,整合您的更改。
git