git restore 和 git checkout-index 有什么区别?



有两个相似得令人困惑的命令,git restoregit checkout-index。我看到git restore将文件签出到工作树中。我还看到git checkout-index也将文件签出到工作树中。根据这些答案,听起来两个命令的作用是一样的。两者的引入似乎是为了澄清git checkout的多种不同用法。唯一的区别是纯粹的形式和API的可操作性,即;瓷器;或";管道";这两个命令的性质?

可以说git checkout-index仍然存在,部分原因是历史原因,但这些命令具有不同的功能。

主要是:

  • git restore有一些选项,允许从恢复索引之外的其他(另一个提交或树(,并可以更新索引
  • git checkout-index将以独占方式将索引中的内容带到磁盘,并且永远不会更改索引

此外,git checkout-index具有一组选项,这些选项使其成为";获取索引中文件的内容以使其通过linter";(通常在预提交挂钩中(:

  • 默认情况下,不会覆盖现有文件(除非在选项中添加-f,否则知道不会从磁盘中删除更改(
  • 它有--prefix(例如:--prefix=/tmp/(或--temp选项,可以轻松创建某些文件的临时副本

git restore,另一方面,其编写目的是替换git checkout -- <filenames>-恢复文件的版本:
当与--worktree选项(默认情况下处于启用状态(一起使用时,它将覆盖和删除磁盘中的文件

  • 有一个选项可以避免";删除文件";部分(--overlay——这对您来说是数字清晰度:((
  • 目前没有选择避免";覆盖文件";part(如果运行git restore --worktree,可能无论如何都要覆盖某些内容…(

(为了完整性:git checkout branch部分-更改活动分支-由git switch覆盖(

git restore命令用于取消暂存更改,或以某种方式将当前分支/源同步到差异分支/源。

git checkout-index命令将把索引中列出的所有文件复制到工作目录中(不覆盖现有文件(。

主要区别在于,使用restore命令,可以使用--worktree标志指定要与当前分支或worktree同步的内容。或者使用--staged标志同步暂存的文件
checkout-index命令中,所有文件都是从索引中复制的。恢复就像从备份中复制,签出就像从自己的索引中添加文件。

有关更多信息,请查看以下命令的手册页:git restore:在这里git checkout-index:此处

最新更新