1. git restore 命令是新命令

在2019年8月发布的 Git 2.23 版本中,git checkout 命令的功能被拆解到两个新的命令中:

  • git switch: 负责分支相关的操作
  • git restore: 负责文件相关的操作

https://stackoverflow.com/questions/58003030/what-is-git-restore-and-how-is-it-different-from-git-reset

相应的,当我们修改了文件,在 git status 命令给出的提示中看到的提示命令, 也变了:

  • 以往会提示 git reset -- <files> 来恢复 stage 区域的内容, 现在则提示 git restore --staged <files>;
  • 以往会提示 git checkout -- <files> 来恢复 working directory 的内容,现在则提示 git restore <files>

遗憾的是, 一些经典的教程尚未做更新,我们只能手动改一下, 例如图解 git 里的: https://marklodato.github.io/visual-git-guide/index-en.html
成为git砖家(6): git restore 命令-LMLPHP
不过,stackoverflow 上的问答中也有人给出了更好的图解:

成为git砖家(6): git restore 命令-LMLPHP

2. git官方对于restore命令的说明

https://git-scm.com/docs/git-restore

在工作目录中用恢复源中的内容恢复指定的路径。如果某个路径被跟踪但在恢复源中不存在,它将被删除以匹配源内容。

该命令也可以使用 --staged 恢复索引中的内容,或者使用 --staged --worktree 同时恢复工作区和索引。

默认情况下,如果使用了–staged选项,内容会从HEAD恢复,否则会从索引恢复。使用–source选项可以从不同的提交中恢复。

很遗憾,截至目前(2024年7月28日),git 官方在线文档里仍然标记 restore 命令为实验性质:

3. 总结

一些经典教程中使用了 git reset git checkout 来分别恢复 staging area 和 working directory 内容, 虽然git保持了兼容性,但是新版的git(>=2.23)的 git status 命令给出的提示,是让大家用 git restore --stagedgit restore 两个命令作为替代。

07-29 21:45