当我们使用 git 进行协同工作的时候,经常会用到切换分支的情况。
如果你是第一次使用 git 切换分支的话,可能会遇到一些困惑。因为你在网上查到的有关切换分支的例子中,有一些是使用 git switch,还有一些例子是用的 git checkout来进行分支的切换。
看下表:
| git checkout | git switch | 功能 |
| git checkout my-branch | git switch my-branch | 切换到 my-branch 分支 |
| git checkout -b my-branch | git switch -c my-branch | 创建并切换到 my-branch 分支 |
那么,git switch 和 git checkout 的区别是什么呢?如果两个都可以用于切换分支,那么为什么有两个命令用于相同的目的?
今天我们来讨论一下这个问题。
git checkout 和 git switch 的区别
是这样的,git checkout 是用于创建和切换分支的旧命令。它还可以用于恢复来自某个提交的修改。但是 git checkout 能做的不仅仅是这些,它还可以让你从任何分支复制文件或直接提交到当前工作区中,而无需切换分支。
实际上,git checkout 做了三件事情:
1)切换分支;
2)从暂存区复制文件到工作区(放弃当前修改);
3)从其他区复制文件到工作区;
如果你不明白,那没关系,只需要记住:git checkout 能做的不仅仅是分支的切换,还有很多其他额外的功能,而这些额外的功能,增加了 git checkout 这个命令的复杂性。
因此,从 git 2.23 版本发布以后,引入了两个新的命令:git switch 和 git restore。
这样做的目的,是为了让人们使用 git switch 来切换分支,使用 git restore 来撤销本地修改。与此同时,git checkout 仍然被保存,用于提供更高级的选项来处理各种更加复杂的操作。
那么,git checkout 和 git switch 应该使用哪一个呢?
如果是切换分支,请使用 git switch 命令而不是 git checkout。为什么?因为它就是为这个特定任务创建的。对于新的 git 用户,更容易记住 git switch 用于切换分支,git restore 用于恢复修改。
因此,对于切换和创建分支这个操作来说,使用 git switch 命令替代 git checkout 是被提倡的做法。
最后,我们还需要知道的一点是,在创建分支的时候,无论使用的是 git checkout -b 还是 git switch -c,所创建的分支都是在本地仓库中创建的,要将本地创建的分支推送到远程仓库,可使用如下命令:
git push --set-upstream origin my-branch
以上就是本次分享全部内容,欢迎讨论。




