Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';s git switch和git checkout之间的区别<;分行>;_Git_Git Checkout_Git Switch - Fatal编程技术网

什么';s git switch和git checkout之间的区别<;分行>;

什么';s git switch和git checkout之间的区别<;分行>;,git,git-checkout,git-switch,Git,Git Checkout,Git Switch,Git 2.23一个新命令Git switch——在阅读文档后,它看起来与Git checkout几乎相同。有人能解释一下区别或用例吗 引入了两个新命令“git-switch”和“git-restore” 拆分“检查分支机构以推进其历史”和 “正在从索引和/或要处理的树中检出路径 从单一的“git签出”中推进当前历史 指挥部 git checkout有点像瑞士军刀,有几个不相关的用途 如果您修改了一个文件,但尚未进行更改,那么git checkout将撤消修改。。。取消对文件所做更改的快速简便方

Git 2.23一个新命令
Git switch
——在阅读文档后,它看起来与
Git checkout
几乎相同。有人能解释一下区别或用例吗

引入了两个新命令“git-switch”和“git-restore” 拆分“检查分支机构以推进其历史”和 “正在从索引和/或要处理的树中检出路径 从单一的“git签出”中推进当前历史 指挥部


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

如果您修改了一个文件,但尚未进行更改,那么
git checkout
将撤消修改。。。取消对文件所做更改的快速简便方法。你留在同一个部门

git checkout
(如您所述)切换分支

两种完全不同的用途,如果文件名和分支名相似,可能会导致混淆


将它作为两个命令更清晰。

好吧,根据您链接到的文档,它的唯一目的是分割和澄清git checkout的两种不同用法:

  • git开关
    现在可以用来更改分支,就像
    git checkout
    那样
  • git restore
    可用于将文件重置为特定版本,就像
    git checkout--
    所做的那样

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

切换有一些限制:目前您可以从任何提交切换到
,但是不可能从
切换到具有分离头状态的特定提交。因此,您需要使用
git checkout 5efb
(其中5efb是任意提交的哈希引用示例)

InfoQ上有一篇关于这个主题的好文章:git团队是否计划反对
git checkout
?我在使用它时没有看到任何弃用警告。但是有了
git开关
git恢复
,我现在觉得没有必要签出
。然而,如果不是不推荐的话,Git团队只是让事情变得更加混乱,而不是更少。有人知道git签出的计划吗?如果它仍然有一个用例,是否有人可以添加或编辑一个答案来详细说明它的用例。@MikeWilliamson我不这么认为,你仍然需要
git checkout
@BastianVenthur是的,谢谢!不幸的是,这意味着
checkout
只会停留在少数时间使用的“角落案例”中。这将延长混乱的时间。但我想我们只能互相帮助度过难关了这似乎是一个很好的改变。做一个分支<代码>git签出
交换分支
git签出
获取文件的特定版本<代码>git签出
是否删除对一个文件的更改<代码>git签出老实说,我想知道有多少正常的git工作流程可以通过使用各种标志来
git签出
来完成。那么现在的想法是
git签出
在技术上不再需要了吗?或者它仍然在用于某些事情,例如签出一个不是分支头的提交(移动到“分离头”模式)?@Mike你怎么能说签出不生成分支在你说签出生成分支后一句话?
-b
标志的内部工作方式无关紧要。Mike我理解你关于操作和命令的观点,但这次讨论的是命令。除非我们使用超低级API,否则我们无法直接访问“操作”。我们只能访问命令。这是一个不必要的学究式的区别。有用的注意:对于那些习惯于
git checkout-b
的人,你可以使用
git switch-c
获得与你提到的相同的效果,使用相同名称的分支和文件是令人困惑的。我假设分支优先于文件,因为这通常更可取?或者这是怎么回事?@AgentM是的,没错。如果分支和文件具有相同的名称,则执行
git checkout
会优先选择分支而不是文件。如果要签出文件而不是分支,则必须使用
--
将其与选项分开。这是许多Git和其他Unix命令的常用习惯用法。我认为这实际上是一个特性,而不是一个bug(限制)<代码>开关是为更改分支而创建的,当您这样做时,您确实希望成为该分支的负责人<代码>签出是一种更通用的操作,它使您的工作副本符合历史记录中的任何给定状态(=提交)。由于任何分支名称都是该分支的头提交的别名,因此签出分支在技术上与签出任何其他提交没有区别。使用
-d
您可以:
git switch-d 6c13