git switch 与 git checkout的不同
git switch用来切换分支,可是我们以前git check out不是用的好好的么,为什么引入这么一个命令呢?
文章共1,046字 · 阅读需要大约4分钟
一键AI生成摘要,助你高效阅读
问答
·
git switch
切换分支
首先查一下本地分支,当前只有一个分支demo5
$ git br
* demo5
使用git switch
可以切换分支,如果加-C
可以创建一个分支并切换到新建分支,
$ git switch -c demo6
Switched to a new branch 'demo6'
现在我们查一下本地分支,可以看到我们本地多了一个demo6
的分支,并且进行了分支切换
$ git br
demo5
* demo6
我们不是已经有git check out
了么
是的在switch
出现之前,我们是用check out
进行分支切换的,当然现在我们依然还可以使用无所不能的check out
进行分支切换。其实,两者在实现分支切换这一功能时,效果几乎是完全相同的。
我们可以使用git branch
新建一个分支,可以使用git switch
或者git checkout
切换分支。当我们需要新建并直接切换到一个新分支时,git switch -c
和git check out -b
的效果也是一样的。
所以,通常情况下,以下四组指令可以认为是等同的,
git br demo6
git check out demo6
git br demo6
git switch demo6
git check out -b demo6
git switch -c demo6
check out
和 switch
切换分支方面的不同
既然我们已经有了切换分支的命令,为何这么麻烦再引入一个命令?
- 第一个原因,这样定义更清晰直接。
switch
仅仅用于切换,而check out
是一个很底层的命令,可以完成很多事情。 - 在特定情况下使用
check out
会造成困惑,下边我们来做一个具体的实验
- 首先,我们新建一个名叫
rtklib.h
的分支,然后切换会我们的demo6
分支 - 在
demo6
分支上,我们胡乱做一些修改,现在我们的状态如下,
$ git st -s
M src/lambda.c
M src/postpos.c
M src/rcvraw.c
M src/rtklib.h
- 现在我们发现rtklib.h的修改完全错乱,根本不用修改这个文件,我们想恢复到以前的状态,于是我们执行以下指令,
$ git co rtklib.h
Switched to branch 'rtklib.h'
M src/lambda.c
M src/postpos.c
M src/rcvraw.c
M src/rtklib.h
啊,指令没有按照预期执行,而是显示Switched to branch 'rtklib.h'
,这就表示我们切换到了新的分支,我们确认一下,
$ git br
demo5
demo6
* rtklib.h
果然,现在我们已经切换到了rtklib.h
这个分支~
如何解决这个困惑
那么我们现在有个分支的名字和一个源文件同名了,这种情况下怎么恢复文件呢,
- 首先我们切换回
demo6
分支
$ git switch demo6
Switched to branch 'demo6'
M src/lambda.c
M src/postpos.c
M src/rcvraw.c
M src/rtklib.h
- 不使用
check out
指令,取而代之,我们使用restore
命令,
$ git restore rtklib.h
- 现在我们看一下状态,
$ git st -s
M lambda.c
M postpos.c
M rcvraw.c
任务完成!
更多推荐
已为社区贡献2条内容
所有评论(0)