29-git-24-restore

概述

因为git checkout 命令职责较多、不够明确,所以git 2.23 版本新增了switch、restore命令

switch命令专门用来切换分支、创建并切换分支等

restore命令专门用来恢复(撤销)暂存区和工作区的文件

命令

为了方便初步理解,先使用撤销

撤销工作区文件的修改

撤销工作区指定文件的修改 ,即从暂存区覆盖到工作区

--worktree为默认参数,可以省略

git restore [--worktree] [file]

撤销工作区所有文件

git restore .

撤销暂存区文件的修改

撤销暂存区指定文件的修改,即从仓库覆盖到暂存区。但是被撤销的文件不会更改,会恢复到工作区。

git restore --staged [file]

撤销暂存区所有文件

git restore --staged .

撤销工作区和暂存区文件的修改

撤销工作区和暂存区文件的修改,即从仓库到暂存区和工作区

git restore --staged --worktree [file]

切换工作区内容

将工作区内容切换到某个快照

git restore --source [commitID] .
// 工作区切换到上次提交
git restore --source HEAD~ .

参数详解

进一步理解,使用恢复

恢复一个文件,从哪里到哪里

--source 来源地,即从哪里

--staged 目的地,即到哪里(暂存区)

--worktree 目的地,即到哪里(工作区)

举例说明:假如把readme.md从上次提交同时恢复到暂存区和工作区

git restore --source HEAD~ --staged --worktree readme.md

注意事项

必须指定要覆盖的文件,可以是具体的某一个,也可以是全部文件,但必须要指定,否则会报以下错误

you must specify path(s) to restore