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

相关推荐
DevUp4 小时前
一个管「引」,一个管「抄」:Submodule 和 Subtree 到底差在哪
git·前端工程化
lingran__5 小时前
Git 完全指南(三):远程仓库与标签管理
开发语言·git·gitee·ssh·团队协作·远程仓库·分布式版本控制
lingran__21 小时前
Git 完全指南(二):分支管理
git·分支管理·版本控制·团队协作·多人开发·git flow
必须会一定会1 天前
Agent Handoff v0.6.0 跨电脑同步:Git、EVENTS.jsonl、CONTEXT.md 使用方法
人工智能·git·ai编程
cui_hao_nan1 天前
Git常用命令1
运维·git
xxwl5851 天前
Git常用命令的学习
git·学习
攻城狮-申1 天前
git本地分支对齐远程分支
前端·git
不怕犯错,就怕不做2 天前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
ELI_He9992 天前
如何还原已经推送的提交
git
️学习的小王2 天前
Git项目提交忽略文件怎么做?以Python项目为例,详解.gitignore
git·python·elasticsearch