消除类似行为的 git 命令 checkout -- 和 restore

has*_*bal 5 git

所以多年来我一直在使用 git 命令的一个子集,这些命令对我很有用。但是我需要知道两个非常相似的行为命令的区别和首选用法。所以。

当我对签入存储库的一个或多个文件进行了编辑并且我想删除所有这些编辑(编辑尚未暂存)时,我使用以下命令:

git checkout -- <path>

但显然有一个更现代的选择。

git restore --source=HEAD --staged --worktree <path>

git checkout -- <path>打算在某个时刻被弃用?两者有什么区别?

LeG*_*GEC 6

两个命令之间行为的主要区别:

git restore --source={xxx} [--worktree] [--staged] -- <path>
# and
git checkout {xxx} -- <path>
Run Code Online (Sandbox Code Playgroud)

  • git restore删除不存在的文件{xxx}
  • git checkout 不会碰这些。

因此git restore,所需的行为“将该文件/该目录还原到提交时的确切状态{xxx}”,有更多的空间可以意外删除。

根据您使用的选项(--worktree和/或--staged),删除将发生在磁盘和/或索引中。还有一个--overlay选项可以防止删除(并且基本上表现得像git checkout {xxx} -- <path>)。


git checkout 是 git 的很大一部分(如此多的脚本取决于其当前行为),恕我直言,它极不可能以如此剧烈的方式改变行为。