首页 > 解决方案 > Git无法切换分支,除了master

问题描述

我是 git 新手,正在尝试处理分叉和克隆的 repo。在我的电脑中,我可以看到分支。

c:\>git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/upstream/dev
  remotes/upstream/master

和,

C:\>git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/master
  upstream/dev
  upstream/master

但是当我这样做时

c:\> git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.

c:\> git checkout dev
error: pathspec 'dev' did not match any file(s) known to git.

谁能告诉我为什么我不能切换到dev分支?我用谷歌搜索了一下,更新了 git(现在是 2.18.0.windows.1)。这个问题仍然存在。

编辑:当我在桌面应用程序中随机尝试时,它得到了解决。我打开了windows git 桌面软件。单击选项“添加本地存储库”并选择我克隆存储库的文件夹。然后我点击下拉分支,我可以看到dev那里。当我选择它时,它切换到该分支并且命令提示符问题也得到了解决。现在我可以切换到masterdev。我不知道我这样做时内部发生了什么,但它现在正在工作。

标签: gitgithub

解决方案


man git-checkout( git help checkout):

如果<branch>未找到,但在一个远程(调用它)中确实存在一个<remote>具有匹配名称的跟踪分支,则视为等同于

 $ git checkout -b <branch> --track <remote>/<branch>

所以,通常,git checkout dev只会工作并做正确的事情。在您的情况下它不起作用的原因是您有两个遥控器,origin并且upstream都包含一个dev分支,因此 Git 不知道要签出哪个遥控器。

在这种情况下,您必须改用较长的形式:

git checkout -b dev --track origin/dev

-b dev会创建一个名为的本地分支dev,因此您最终不会处于“分离 HEAD”状态。将其--track origin/dev设置为跟踪分支,以便您可以正确推拉它。

实际上,--track为您提供了一个合理的默认值-b,因此您可以将其缩短为:

git checkout --track origin/dev

推荐阅读