← 返回文章列表
前端工程化·833 次阅读

Git 入门笔记:工作区、暂存区与版本回退

Git 入门笔记:工作区、暂存区与版本回退

用 Git 有一段时间了,之前一直是 add、commit、push 三板斧,出了岔子就抓瞎。最近把"三个区"的概念理清楚之后,大部分命令突然就串起来了。

三个区:文件在 Git 里的旅程

工作区 ──git add──▶ 暂存区 ──git commit──▶ 本地仓库
(你改文件)      (待提交的清单)      (正式的历史记录)
  • 工作区:项目目录里你直接编辑的文件
  • 暂存区(index/stage):一个"购物车",add 就是把改动放进去,commit 时只提交购物车里的东西
  • 本地仓库:commit 之后形成的不可变历史

理解了暂存区,就能解释一个新手常见困惑:改了文件直接 commit 为什么提示 nothing to commit?因为你没 add,购物车是空的。

暂存区的真正价值是允许你分批组织提交——改了两个功能,可以分两次 add、两次 commit,历史干干净净。

日常操作对照

git status              # 看三个区的状态,最常用,没事就敲
git diff                # 工作区 vs 暂存区(还没 add 的改动)
git diff --staged       # 暂存区 vs 上一次提交(add 了还没 commit 的)
git log --oneline       # 查看提交历史

版本回退:reset 的三种模式

这是最容易出事的地方,三种模式区别就在"对暂存区和工作区做什么":

git reset --soft HEAD~1    # 只移动 HEAD 指针,暂存区、工作区都不动
git reset --mixed HEAD~1   # 默认模式:HEAD + 重置暂存区,工作区不动
git reset --hard HEAD~1    # 全部重置,工作区改动直接丢弃!

同样回退一个提交:

  • --soft:撤销 commit,改动还在暂存区。适合"上次提交信息写错了,重新提交"
  • --mixed:撤销 commit 和 add,改动回到工作区。适合"这个提交拆得不好,重新组织"
  • --hard:commit、add、工作区改动全没了。慎用,没提交过的东西就找不回来了

HEAD~1 表示上一个提交,HEAD~3 上三个,也可以直接写提交哈希。

几个救场命令

# 工作区某个文件改乱了,想丢弃(还没 add)
git checkout -- src/main.js

# 已经 add 了,想从暂存区撤出来(改动保留在工作区)
git reset HEAD src/main.js

# 已经 commit 了但还没 push,改提交信息
git commit --amend

# 已经 push 了,要安全地撤销某次提交
git revert <commit-hash>

最后两个值得展开:

  • --amend 是"修改历史",只用于还没 push 的提交;push 之后再 amend 就是给队友制造灾难
  • revert 不是删除历史,而是新增一个反向提交来抵消,历史完整可追溯,是公共分支上唯一安全的"撤销"

记住这几条就够了

  1. 没事多 git status,它会把下一步该敲什么提示给你
  2. --hard 之前先想清楚,或者先 git stash 备份一下
  3. 改历史(reset/amend/rebase)只对自己的本地提交动手,push 出去的用 revert
  4. 提交信息认真写,半年后的自己会感谢你

入门阶段不用追求记住所有命令,把三个区的模型装在脑子里,遇到问题知道去哪查,就已经超过大多数"三板斧选手"了。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4