Git无法切换分支,主分支除外
我是git的新手,当时正在尝试一个分叉克隆的回购协议。在我的电脑里我可以看到分支Git无法切换分支,主分支除外,git,github,Git,Github,我是git的新手,当时正在尝试一个分叉克隆的回购协议。在我的电脑里我可以看到分支 c:\>git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master remotes/upstream/dev remotes/upstream/master 以及 但当我这么做的时候 c:\> git checkout master A
c:\>git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
remotes/upstream/dev
remotes/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桌面软件。单击“添加本地repository”选项并选择我克隆repo的文件夹。然后单击下拉分支,我可以在那里看到
dev
。当我选择它时,它切换到那个分支,命令提示符问题也得到了解决。现在我可以切换到master
或dev
。我不知道我这样做时内部发生了什么,但它现在正在工作。您没有名为dev
的本地分支。您需要将源站点中的分支提取到本地(您的计算机)
您可能需要尝试以下方法:
git fetch origin
git checkout dev
您没有名为
dev
的本地分支。您需要将源站点中的分支提取到本地(您的计算机)
您可能需要尝试以下方法:
git fetch origin
git checkout dev
从
man-git-checkout
(git-help-checkout
):
如果未找到
,但确实存在跟踪
使用
匹配名称,视为等同于
$ git checkout -b <branch> --track <remote>/<branch>
-b dev
创建一个名为dev
的本地分支,这样您就不会处于“分离头”状态。--track origin/dev
将其设置为跟踪分支,以便您可以正确地推拉它
实际上,--track
为-b
提供了一个合理的默认值,因此您可以将其缩短为:
git checkout --track origin/dev
从
man-git-checkout
(git-help-checkout
):
如果未找到
,但确实存在跟踪
使用
匹配名称,视为等同于
$ git checkout -b <branch> --track <remote>/<branch>
-b dev
创建一个名为dev
的本地分支,这样您就不会处于“分离头”状态。--track origin/dev
将其设置为跟踪分支,以便您可以正确地推拉它
实际上,--track
为-b
提供了一个合理的默认值,因此您可以将其缩短为:
git checkout --track origin/dev
我试过了,它会变成一个独立的头部模式。如下所示,c:\>git签出源代码/dev注意:签出'origin/dev'。你处于“超脱的头部”状态。您可以环顾四周,进行实验性更改并提交它们,并且可以通过执行另一次签出放弃在此状态下所做的任何提交,而不会影响任何分支。如果要创建新分支以保留创建的提交,可以(现在或以后)再次使用-b和checkout命令来执行此操作。示例:git checkout-b HEAD现在的Gui缩略图为455946b(#14),我试过了,它将进入分离HEAD模式。如下所示,c:\>git签出源代码/dev注意:签出'origin/dev'。你处于“超脱的头部”状态。您可以环顾四周,进行实验性更改并提交它们,并且可以通过执行另一次签出放弃在此状态下所做的任何提交,而不会影响任何分支。如果要创建新分支以保留创建的提交,可以(现在或以后)再次使用-b和checkout命令来执行此操作。示例:git checkout-b HEAD现在是455946bgui缩略图(#14)切换到dev分支?就像唯一的一个?这里的问题是,尽管git给出的错误消息可以更清楚地说明这一点,但是您有两个开发分支,
origin/dev
和upstream/dev
。因为git没有找到1个分支,所以它不知道您想签出哪个分支master
已经在本地签出至少一次,这样可以正常工作,但是git checkout dev
没有找到名为dev
的本地分支,因此它会在远程上查找分支,因为它找到了2个,所以它不知道您指的是哪一个。切换到dev branch?就像唯一的一个?这里的问题是,尽管git给出的错误消息可以更清楚地说明这一点,但是您有两个开发分支,origin/dev
和upstream/dev
。因为git没有找到1个分支,所以它不知道您想签出哪个分支master
已经在本地签出了至少一次,这样可以正常工作,但是git checkout dev没有找到名为dev
的本地分支,因此它在远程上寻找分支,因为它找到了2个,所以它不知道您指的是哪一个。坦白说,git给出的错误消息可以更清楚地说明这一点。我以某种奇怪的方式解决了这个问题(请参见编辑)。我只是想问一件事,这不是通常的做法吗?分叉和克隆,然后将原始回购设置为上游?那么这不是有两个dev
?一个是我自己的克隆回购协议,另一个是原始回购协议?我不知道这是否有意义,我对这有点陌生。我不知道GitHub桌面应用程序,但我猜它默认为源站远程查看分支。或者它查看了repo URL并使用了您的用户帐户所拥有的URL(该URL也将解析为源代码
)。@LasseVågsætherKarlsen绝对,错误消息是可怕的。它可能源于这样一个事实,即git checkout X
中的X
可能指的是一个分支,但也指的是一个文件或目录(“git中的pathspec”)。它只有在找不到分支时才开始查找文件。这不是借口,只是观察。请注意,您可以拼写checkoutgit checkout--track origin/dev
:默认的-