概述
因为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