Git Restore命令介绍(撤销工作区修改、恢复多个文件、取消暂存:--staged、同时恢复暂存区和工作区:--worktree、-SW、从指定commit恢复文件--source)
文章目录
- Git Restore 命令详解:安全恢复文件内容的新方式
- 一、git restore 是什么?
- 二、Git 中三个重要区域
- 三、git restore 最常见用途
- 1. 撤销工作区修改
- 四、恢复多个文件
- 五、取消暂存(Unstage)
- 六、同时恢复工作区 + 暂存区
- 七、从指定 commit 恢复文件
- 八、恢复目录
- 九、git restore 的核心行为
- 十、restore 与 checkout 区别
- 十一、restore 与 reset 区别
- git restore
- git reset
- 十二、常见使用场景
- 场景1:撤销误修改
- 场景2:取消 git add
- 场景3:恢复历史版本文件
- 场景4:彻底放弃改动
- 十三、restore 工作流图解
- 1. 普通 restore
- 2. restore --staged
- 3. restore --source
- 十四、危险点(非常重要)
- restore 会覆盖文件
- 十五、最佳实践
- 推荐使用 restore/switch 替代 checkout
- restore 前先 diff
- 小范围恢复优先
- 十六、常用命令速查表
- 十七、总结
Git Restore 命令详解:安全恢复文件内容的新方式
在早期 Git 使用中,很多开发者会使用:
gitcheckout -- file.txt来撤销文件修改。
但git checkout同时承担了:
- 切换分支
- 恢复文件
- 分离 HEAD
等多种职责,语义非常混乱。
因此从 Git 2.23 开始,Git 官方引入了两个新命令:
git switch:专门用于切换分支git restore:专门用于恢复文件
其中:
gitrestore就是现代 Git 中用于“撤销文件修改”的推荐命令。
一、git restore 是什么?
git restore用于:
将文件恢复到某个 Git 状态。
它主要用于:
- 撤销工作区修改
- 取消暂存(unstage)
- 从某个 commit 恢复文件
- 恢复误修改内容
它不会移动 HEAD。
不会切换分支。
只关注:
文件内容恢复二、Git 中三个重要区域
理解git restore之前,必须先理解 Git 的三个区域:
Working Tree(工作区) ↓ Index / Staging Area(暂存区) ↓ Repository(仓库)可以理解为:
| 区域 | 说明 |
|---|---|
| 工作区 | 你正在编辑的文件 |
| 暂存区 | 即将 commit 的内容 |
| 仓库 | 已提交历史 |
而:
gitrestore本质上是在:
不同区域之间恢复文件三、git restore 最常见用途
1. 撤销工作区修改
假设:
vimapp.py修改了文件。
查看状态:
gitstatus输出:
modified: app.py现在想:
放弃修改执行:
gitrestore app.py效果:
工作区恢复到暂存区状态即:
撤销未提交修改四、恢复多个文件
gitrestore file1.txt file2.txt或者:
gitrestore.恢复当前目录所有修改:
危险操作!因为会直接丢弃所有未提交修改。
五、取消暂存(Unstage)
很多人会混淆:
gitadd之后如何撤销。
例如:
gitaddapp.py此时文件进入暂存区。
如果想:
取消 git add执行:
gitrestore--stagedapp.py效果:
从暂存区移除 但保留工作区修改这相当于:
gitreset HEAD app.py但语义更清晰。
六、同时恢复工作区 + 暂存区
有时候你既:
- 已 git add
- 又修改了工作区
想彻底恢复:
全部回到 commit 状态可以:
gitrestore--staged--worktreeapp.py或者:
gitrestore-SWapp.py效果:
工作区恢复 暂存区恢复即:
彻底撤销文件修改七、从指定 commit 恢复文件
你还可以从历史版本恢复文件。
例如:
gitrestore--source=HEAD~1 app.py表示:
从上一个 commit 恢复 app.py恢复后:
只修改工作区 不会自动 commit这是非常安全的设计。
八、恢复目录
恢复整个目录:
gitrestore src/恢复指定类型文件:
gitrestore'*.py'注意:
*.py最好加引号,避免 shell 提前展开。
九、git restore 的核心行为
默认情况下:
gitrestore file.txt等价于:
从暂存区恢复到工作区即:
Index -> Working Tree而:
gitrestore--staged则是:
Repository -> Index十、restore 与 checkout 区别
旧方式:
gitcheckout -- app.py新方式:
gitrestore app.py推荐新方式原因:
| 命令 | 职责 |
|---|---|
| git switch | 切换分支 |
| git restore | 恢复文件 |
| git checkout | 历史兼容综合命令 |
现代 Git 更强调:
一个命令只做一件事十一、restore 与 reset 区别
很多人容易混淆:
- restore
- reset
区别非常关键。
git restore
关注:
文件内容恢复不移动分支。
不修改 commit 历史。
git reset
关注:
移动 HEAD会影响:
- 分支指针
- commit 历史
- 暂存区
危险性更高。
十二、常见使用场景
场景1:撤销误修改
gitrestore config.yaml场景2:取消 git add
gitrestore--staged.场景3:恢复历史版本文件
gitrestore--source=v1.0 README.md场景4:彻底放弃改动
gitrestore--staged--worktree.十三、restore 工作流图解
1. 普通 restore
Index ↓ Working Tree命令:
gitrestore file.txt2. restore --staged
Repository ↓ Index命令:
gitrestore--stagedfile.txt3. restore --source
指定 Commit ↓ Working Tree命令:
gitrestore--source=HEAD~2 file.txt十四、危险点(非常重要)
restore 会覆盖文件
例如:
gitrestore.会直接丢弃:
所有未提交修改无法恢复。
因此建议:
先查看:
gitdiff确认后再 restore。
十五、最佳实践
推荐使用 restore/switch 替代 checkout
现代 Git 推荐:
gitswitchgitrestore代替:
gitcheckoutrestore 前先 diff
gitdiff避免误删修改。
小范围恢复优先
优先:
gitrestore specific-file而不是:
gitrestore.十六、常用命令速查表
| 功能 | 命令 |
|---|---|
| 撤销工作区修改 | git restore file.txt |
| 恢复所有文件 | git restore . |
| 取消暂存 | git restore --staged file.txt |
| 同时恢复工作区和暂存区 | git restore --staged --worktree file.txt |
| 从历史 commit 恢复 | git restore --source=HEAD~1 file.txt |
| 恢复目录 | git restore src/ |
十七、总结
git restore是现代 Git 中:
最安全、最清晰的文件恢复命令它解决了:
git checkout 职责混乱的问题。
你可以这样记忆:
| 命令 | 作用 |
|---|---|
| switch | 切分支 |
| restore | 恢复文件 |
| reset | 移动历史 |
| revert | 反向提交 |
其中:
restore = 文件恢复专家是日常开发中最常用的 Git 命令之一。
