“无法更新路径并同时切换到分支”


186

有时我会使用该checkout -b选项创建一个新分支,同时将其检出并在一个命令中设置跟踪。

在新环境中,我收到此错误:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

为什么Git不喜欢它?这曾经与相同的仓库一起使用。


6
错误消息告诉您这origin/master不是提交ID,即不是有效的远程分支。它会显示在git branch -r输出中吗?
torek 2014年

没有。事实证明,克隆期间我没有签出所有远程分支。
marekful

Answers:


199

' origin/master',不能将其解析为提交

奇怪:您需要检查遥控器:

git remote -v

并确保origin已获取:

git fetch origin

然后:

git branch -avv

(以查看是否确实获取了origin/master分支)

最后,使用Git 2.23+(2019年8月)git switch代替混乱的方法git checkout

git switch -c test --track origin/master

11
我的命令中有错别字触发了此错误;我没有正确拼写遥控器!
2014年

2
这是一个新分支,我的本地存储库对此一无所知。我必须做一个pull,然后此命令起作用。
coding_idiot

2
这个答案很有帮助,因为它告诉我确实发生了一些奇怪的事情:远程控制器设置正确,但是新的远程分支根本没有被获取。当我将远程克隆到一个干净的目录中时,它可以工作。我的.git目录会以某种方式损坏吗?
康拉德·鲁道夫2015年

git remote -v返回此致命错误:不是有效的对象名称:'remote'。
卡里姆·萨米尔

@KarimSamir您可以问一个单独的问题(使用您的操作系统和git版本),因为git remote -v在git repo中执行确实有效。
VonC 2015年

78

FWIW:如果您的分支名称中有错字,您将得到同样的错误。


4
实际上,如果有人可以花一些时间告诉Git开发人员这件事会很好,错误消息不是非常有用;)
Scorchio 2015年

8
是的,这是我的问题,我的分支名称中有空格
Karim Samir 2015年

同样在这里,我尝试git checkout -b origin mybranch而不是git checkout -b mybranch(额外origin
纪尧姆·雷诺尔

我复制粘贴了我的分支名称,并且在导致此错误的分支名称后面有空白。
learningKnight

我尝试结帐,orgin/my-branch而不是origin/my-branch。想念一个人i,我不停地挠了一下头,以了解为什么一个老盟友拒绝相处。错别字确实是问题所在。
DDM

55

您可以在以下情况下遇到此错误:例如,Travis构建,默认情况下使用签出代码git clone --depth=50 --branch=master。据我所知,您可以--depth通过进行控制,.travis.yml但不能通过进行控制--branch。由于这导致远程仅跟踪单个分支,因此您需要独立更新远程以跟踪所需的远程引用。

之前:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

解决方法:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

后:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master

5
为我解决了。我使用了浅层--depth = 1克隆,这就是我切换分支所需要的。
Sawtaytoes 2015年

1
是的,深度肯定会导致此错误!如果可能的话,我建议对前几个句子进行编辑以强调深度。
Dubslow


9

偶然发现此问题时,可以按照以下步骤操作:

  1. 运行以下命令以列出本地存储库已知的分支。

git remote show origin

输出以下内容:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. 在验证了诸如(获取URL等)之类的详细信息之后,运行此命令以获取存在于远程但本地不存在的任何新分支(即,您可能希望在本地仓库中检出)。
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

如您所见,新分支已从远程获取。
3.最后,使用此命令检出分支

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

不必明确告诉Git使用remote跟踪(使用--track)分支。

上面的命令将设置本地分支以从原点跟踪远程分支。



1

对我来说,我需要添加遥控器:

git remote -add myRemoteName('origin' in your case) remoteGitURL

那我可以拿

git fetch myRemoteName

1

这是因为您的本地分支不跟踪远程分支。如ssasi所述,您需要使用以下命令:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

我刚刚解决了我的问题...。


0

首先,您需要到Fetch远程(特定分支),然后可以创建本地br,并使用命令(即,checkout使用-b和--track)使用该远程分支对其进行跟踪。


0

您应该转到子模块dir并运行git status

您可能会看到很多文件被删除了。你可以跑

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles是你的名字

  5. git submoudle add ....


0

您可以使用以下命令:git remote update,git fetch,git checkout -b branch_nameA origin:branch_nameB

我认为可能是因为您的本地分支无法跟踪远程分支

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.