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 -cgit 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 outswitch 切换分支方面的不同

既然我们已经有了切换分支的命令,为何这么麻烦再引入一个命令?

  • 第一个原因,这样定义更清晰直接。switch仅仅用于切换,而check out是一个很底层的命令,可以完成很多事情。
  • 在特定情况下使用check out会造成困惑,下边我们来做一个具体的实验
  1. 首先,我们新建一个名叫rtklib.h的分支,然后切换会我们的demo6分支
  2. demo6分支上,我们胡乱做一些修改,现在我们的状态如下,
$ git st -s
 M src/lambda.c
 M src/postpos.c
 M src/rcvraw.c
 M src/rtklib.h
  1. 现在我们发现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这个分支~

如何解决这个困惑

那么我们现在有个分支的名字和一个源文件同名了,这种情况下怎么恢复文件呢,

  1. 首先我们切换回demo6分支
$ git switch demo6
Switched to branch 'demo6'
M       src/lambda.c
M       src/postpos.c
M       src/rcvraw.c
M       src/rtklib.h
  1. 不使用check out指令,取而代之,我们使用restore命令,
    $ git restore rtklib.h
  2. 现在我们看一下状态,
$ git st -s
 M lambda.c
 M postpos.c
 M rcvraw.c

任务完成!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐