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

相关推荐
满天星830357711 分钟前
【Git】原理及使用(八) (企业级开发模型)
git
江畔柳前堤1 小时前
第15章:docker故障排查与面试题
大数据·运维·git·elasticsearch·docker·容器·eureka
山川而川-R1 小时前
dify、docker、Git在Windows安装教程_26.7.3
git
江畔柳前堤1 小时前
第07章:Docker 网络模型
运维·网络·git·elasticsearch·docker·容器·架构
老酒馆的馆长大人3 小时前
git入门级教程
git
kyriewen1 天前
别再每次都 Google 了:我整理了前端日常最常踩的 10 个 Git 坑,附速查表
前端·javascript·git
A_Lonely_Cat3 天前
记一次 GitHub 幽灵协作者大清洗:强制重写 Git 历史与穿透 CDN 缓存实践
git·github
和你看星星5 天前
Git rerere:让重复冲突只解决一次
git
嘻嘻仙人9 天前
Ubuntu中 git上传自己的项目和二次上传一般流程
git·github
Patrick_Wilson9 天前
Squash Merge 的血缘陷阱:为什么删掉的代码又活了过来
前端·git·程序员