git switch和git checkout <branch>有什么区别

时间:2019-07-30 06:46:30

标签: git git-checkout

Git 2.23 introduces一个新命令git switch-阅读文档后,似乎与git checkout <branchname>几乎一样,有人可以解释其中的区别或用例吗?

  

引入了两个新命令“ git switch”和“ git restore”      拆分“签出分支机构以推进其历史”      “检查出索引以外的路径和/或需要处理的树状路径      单次“ git checkout”中的“前进当前历史记录”      命令。

3 个答案:

答案 0 :(得分:27)

好吧,根据您链接到的文档,其唯一目的是分解并阐明git checkout的两种不同用法:

  • git switch现在可以用来更改分支,就像git checkout <branchname>一样
  • git restore可以像git checkout --<path_to_file>一样将文件重置为某些修订版本

人们对使用git checkout的这些不同方式感到困惑,正如您从Stackoverflow上有关git checkout的许多问题中可以看到的。 Git开发人员似乎已经考虑到了这一点。

答案 1 :(得分:14)

git checkout有点像瑞士军刀,有几种不相关的用途。

如果您修改文件但还没有上演更改,那么git checkout <filename>将撤消修改,这是取消文件更改的快速简便的方法。您留在同一分支。

git checkout <branchname>(如您所述)切换分支。

两个完全不同的用途,如果文件名和分支名称相似,可能会引起混淆。

将其作为两个命令更为清楚。

答案 2 :(得分:3)

switch有一些局限性:目前,您可以将任何提交的切换到<branch name>,但是不可能将切换到{{ 1}}到状态为 HEADED 的特定提交。因此,您需要使用<branch name>(其中5efb是对任意提交的哈希引用的示例)