Git 最实用的四个还原命令详解

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%的"后悔"场景!

相关推荐
码农小白-RMS29 分钟前
cursor-执行git指令(vscode同理)
git
爱喝矿泉水的猛男3 小时前
Git Commit 提交信息标准格式
git·commit
℘团子এ3 小时前
git中,将新项目推送到新建的远程仓库
git
gitboyzcf3 小时前
Git 常用命令
前端·git·后端
xiAo_Ju19 小时前
git hooks配置
git
mit6.82421 小时前
[Git] 如何拉取 GitHub 仓库的特定子目录
git·github
许心月1 天前
Git#revert
git
军军3601 天前
Git大型仓库的局部开发:分步克隆 + 指定目录拉取
前端·git
间彧1 天前
Git命令速查表
git