1. git restore <file>
- 还原工作区文件到暂存区版本
bash
git restore <file>
作用:将工作区中的文件恢复到暂存区的状态
使用场景:
- 你修改了文件但发现改错了,想恢复到
git add
时的状态 - 测试代码时临时修改,现在想撤销这些修改
示例:
bash
# 1. 修改文件并暂存
echo "hello" > test.txt
git add test.txt
# 2. 继续修改文件
echo "world" >> test.txt
# 3. 发现修改有问题,想恢复到暂存区版本
git restore test.txt # 文件内容回到只有 "hello"
2. git restore --staged <file>
- 撤销暂存区的修改
bash
git restore --staged <file>
作用 :将已经 git add
的文件从暂存区移除,但保留工作区的修改
使用场景:
- 误操作
git add
了不想提交的文件 - 想重新组织提交内容,先取消暂存某些文件
示例:
bash
# 1. 修改多个文件
echo "change1" > file1.txt
echo "change2" > file2.txt
# 2. 全部暂存
git add .
# 3. 发现file2.txt不应该在这次提交中
git restore --staged file2.txt # file2.txt从暂存区移除,但修改还在
3. git reset --hard <commit>
- 回退整个仓库到某个历史提交
bash
git reset --hard <commit>
作用:将HEAD、暂存区和工作区都重置到指定提交的状态
⚠️ 危险性 :会永久删除指定提交之后的所有更改!
使用场景:
- 发现最近几次提交都有严重问题,需要完全回退
- 想要彻底放弃当前所有修改
示例:
bash
# 查看提交历史
git log --oneline
# a1b2c3d 错误的提交3
# d4e5f6g 错误的提交2
# h7i8j9k 错误的提交1
# k1l2m3n 最后一个正确的提交 ← 想回到这里
# 危险操作:回退到正确的提交
git reset --hard k1l2m3n
# 结果:所有错误提交都消失了!
安全建议:使用前先备份
bash
# 创建备份分支
git branch backup-before-reset
# 然后再执行reset
git reset --hard <commit>
4. git clean -fd
- 删除未跟踪的文件和目录
bash
git clean -fd
作用:删除所有未被Git跟踪的文件和目录
参数解释:
-f
(force): 强制删除-d
(directory): 同时删除目录
使用场景:
- 清理编译产生的临时文件
- 删除测试时创建的垃圾文件
- 清理意外创建的文件
示例:
bash
# 当前状态
git status
# Untracked files:
# temp.log
# build/
# .DS_Store
# test_output/
# 预览将要删除的内容(安全操作)
git clean -fd --dry-run
# 确认无误后执行删除
git clean -fd
# 结果:所有未跟踪的文件和目录都被删除
安全建议:
bash
# 先预览要删除的内容
git clean -fd --dry-run
# 交互式删除(可以选择删除哪些)
git clean -fdi
🔍 命令关系总结
这四个命令覆盖了Git的三个主要区域:
scss
工作区 ←--restore--> 暂存区 ←--restore --staged--> 仓库
↓ ↓ ↓
clean -fd (清理暂存) reset --hard
(删除未跟踪) (取消暂存) (重置所有)
⚡ 实际使用流程示例
bash
# 典型的"后悔"操作流程
# 1. 工作时产生了各种文件
echo "test" > important.txt
echo "temp" > temp.log
mkdir build
# 2. 暂存重要文件
git add important.txt
# 3. 继续修改但发现改坏了
echo "bad change" >> important.txt
# 4. 恢复到暂存区版本
git restore important.txt
# 5. 发现这个文件其实不该暂存
git restore --staged important.txt
# 6. 清理临时文件
git clean -fd # 删除 temp.log 和 build/
# 7. 如果之前有错误提交,回退仓库(谨慎!)
git reset --hard HEAD~1
这四个命令基本覆盖了日常开发中99%的"后悔"场景!