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不是删除历史,而是新增一个反向提交来抵消,历史完整可追溯,是公共分支上唯一安全的"撤销"
记住这几条就够了
- 没事多
git status,它会把下一步该敲什么提示给你 --hard之前先想清楚,或者先git stash备份一下- 改历史(reset/amend/rebase)只对自己的本地提交动手,push 出去的用 revert
- 提交信息认真写,半年后的自己会感谢你
入门阶段不用追求记住所有命令,把三个区的模型装在脑子里,遇到问题知道去哪查,就已经超过大多数"三板斧选手"了。
看到这里了?如果这篇文章帮到过你
请我喝瓶可乐就好 🥤

评论0 条
还没有评论,来抢沙发~