Git 2.23引入了一个新命令git switch
-阅读文档后,似乎几乎git checkout <branchname>
可以与某人解释差异或用例相同?
引入了两个新命令“ git switch”和“ git restore”,以拆分“签出分支以改进其历史记录”和“签出索引之外的路径和/或树状代码以推进当前操作” “ git checkout”命令中删除“历史记录”。
Answers:
好吧,根据您链接到的文档,其唯一目的是拆分并阐明以下两种不同的用法git checkout
:
git switch
现在可以用来改变分支机构,git checkout <branchname>
不git restore
可用于重置文件到某些修改,如git checkout --<path_to_file>
不人们对这些不同的使用方式感到困惑git checkout
,正如您从有关git checkout
Stackoverflow的许多问题中可以看到的那样。Git开发人员似乎已经考虑到了这一点。
git checkout
切换分支?git checkout
获取文件的特定版本?git checkout
删除对一个文件的更改?git checkout
老实说,我想知道使用各种标志可以完成多少正常的git工作流程git checkout
。
git checkout
是技术上不再需要的想法了吗?还是在某些事情上仍在使用它,例如检出不是分支头的提交(移至“分离头”模式)?
-b
标志的内部运作无关紧要。它仍然是一个分支。
checkout
操作不会创建分支,它只能切换到已经存在的分支。该命令的-b
选项在实际执行检出之前在内部执行。就像+的快捷方式一样。checkout
git branch
git pull
git fetch
git merge
git checkout -b <branch name>
可以使用git switch -c <branch name>
以获得相同的效果
git checkout
有点像瑞士军刀,它有几种不相关的用途。
如果您修改文件但还没有上演更改,git checkout <filename>
则将撤消修改...一种取消文件更改的快捷简便的方法。您保留在同一分支中。
git checkout <branchname>
(如您所述)切换分支。
两种完全不同的用途,如果文件名和分支名相似,则可能导致混淆。
将其作为两个命令更为清晰。
git checkout <name>
会优先考虑分支而不是文件。
switch
有一些限制:目前您可以从任何提交切换到<branch name>
,但是不可能从 <branch name>
状态为HEAD分离到特定提交。因此,您需要使用git checkout 5efb
(其中5efb是对任意提交的哈希引用的示例)
switch
仅出于更改分支的目的而创建,而这样做时,您确实想位于该分支的HEAD位置。checkout
是更通用的操作,可使您的工作副本与历史记录中的任何给定状态(=提交)保持一致。由于任何分支名称都是该分支的HEAD提交的别名,因此签出分支在技术上与签出任何其他提交没有什么不同。
-d
您可以:git switch -d 6c13