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

相关推荐
戴国进2 小时前
详解Git的worktree实现多分支并行开发
大数据·git
凌冰_2 小时前
Claude Code was unable to find CLAUDE_CODE_GIT_BASH_PATH path路径异常解决
git
xlq223224 小时前
3.git
git
一只大袋鼠15 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
我叫张小白。1 天前
Git 分支管理与团队协作
git
DogDaoDao1 天前
Windows 下 Git 报错:`touch` 无法识别 —— 原因分析与 7 种解决方案(从入门到精通)
windows·git·程序员·npm·powershell·cmd·touch
caicai_xiaobai1 天前
Ubuntu上Git安装步骤
linux·git·ubuntu
come112341 天前
git 区分是 Git 分支还是 worktree 路径名
git
憧憬成为java架构高手的小白1 天前
git多人工作之个人规范使用【ai+个人理解】
git