Git 2.23引入了一个新的命令Git开关——在阅读了文档之后,它看起来和Git checkout <branchname>几乎一样,有人能解释一下区别或用例吗?

引入了两个新命令“git switch”和“git restore” 分裂“检出分支以推进其历史”和 “检查出索引的路径和/或一个树状的工作 从单个“git签出”中推进当前历史记录 命令。


当前回答

Git switch ~= Git checkout -b[分支]。 git checkout [branch]将给你一个分离的HEAD

其他回答

Git签出有点像瑞士军刀,它有几个不相关的用途。

如果你修改了一个文件,但还没有执行修改,那么git checkout <filename>将撤销修改…一种快速而简单的方法取消对文件的更改。你仍然在同一个分支。

Git checkout <branchname>(如您所注意到的)切换分支。

两个完全不同的目的,如果文件名和分支名称相似,可能会导致混淆。

把它作为两个命令就更清楚了。

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

Git开关现在可以用来改变分支,就像Git checkout <branchname>那样 Git恢复可以用于将文件重置为某些修订,如Git checkout——<path_to_file>所做的那样

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

switch有一些限制:目前你可以从任何提交切换到<分支名称>,但是不可能从<分支名称>切换到一个状态为分离HEAD的特定提交。所以你需要使用git签出5efb(其中5efb是任意提交哈希引用的一个例子)

Git switch ~= Git checkout -b[分支]。 git checkout [branch]将给你一个分离的HEAD

以下是git手册 - man git-switch的摘录。

Synopsis git switch [<options>] [--no-guess] <branch> git switch [<options>] --detach [<start-point>] git switch [<options>] (-c|-C) <new-branch> [<start-point>] git switch [<options>] --orphan <new-branch> Description Switch to a specified branch. The working tree and the index are updated to match the branch. All new commits will be added to the tip of this branch. Optionally a new branch could be created with either -c, -C, automatically from a remote branch of same name (see --guess), or detach the working tree from any branch with --detach, along with switching. Switching branches does not require a clean index and working tree (i.e. no differences compared to HEAD). The operation is aborted however if the operation leads to loss of local changes, unless told otherwise with --discard-changes or --merge. THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.