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

相关推荐
裸奔的大金毛6 小时前
Tekton - 自定义镜像配置git仓库克隆
git·ci/cd·devops·tekton
Adorable老犀牛9 小时前
可遇不可求的自动化运维工具 | 2 | 实施阶段一:基础准备
运维·git·vscode·python·node.js·自动化
xiaok10 小时前
把代码上传到gitee的时候,怎么忽略node_modules文件夹
git·gitlab·github
唐叔在学习11 小时前
听说有老哥分不清Git branch和tag?这不看看嘛
git·后端
雁于飞21 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
小毛驴8501 天前
所有微服务部署都使用一个git地址,并且通过docker部署各个服务的情况下,如何编写mvn指令来处理各个服务。
git·docker·微服务
国王不在家1 天前
git 切换仓库后清理分支缓存
git
柯南二号1 天前
【Gitlab】Ubuntu 20.04服务器部署Gitlab
git·gitlab
phac1231 天前
git 如何直接拉去远程仓库的内容且忽略本地与远端不一致的commit
大数据·git·elasticsearch
ficker132 天前
git常用命令
git