Git checkout: updating paths is incompatible with switching branches
Asked Answered
P

11

477

My problem is related to Fatal Git error when switching branch.

I try to fetch a remote branch with the command

git checkout -b local-name origin/remote-name

but I get this error message:

fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/remote-name' which can not be resolved as commit?

If I manually create a branch and then pull the remote branch, it works, just as making a new clone and checking the branch out.

Why does it not work on the repository I work with?

Pietrek answered 3/6, 2009 at 16:16 Comment(2)
what has changed since the first instance of that command (triggering the error message) ?Temblor
git init git fetch git fetch git://blabla.com/dir1/Project.gitAssyrian
R
747

I believe this occurs when you are trying to checkout a remote branch that your local git repo is not aware of yet. Try:

git remote show origin

If the remote branch you want to checkout is under "New remote branches" and not "Tracked remote branches" then you need to fetch them first:

git remote update
git fetch

Now it should work:

git checkout -b local-name origin/remote-name
Reareace answered 3/9, 2009 at 2:52 Comment(14)
This solved the problem for me, not the above arbitrary answer.Erythrism
That should be "git fetch REPOSITORY_NAME" to get all of the branches on that repository.Algar
not necessarily. git fetch will get all of the branches from all remote repos.Boccherini
@Michael sometimes you need to specify the remotes name like @Mike noted.Pyrazole
In case anyone else struggles with the utter craziness of all this: git fetch origin/branchname Is not the same as git fetch. The former simply results in "new (next fetch will store in remotes/origin)" displaying in a column visible via git remote show origin.Ballou
@Mike Thomsen: your comment has been more helpful to me than the "solution". Thanks.Violet
This worked for me but I just checked it out, without the "-b" for new branch.Mer
Matt's answer using git checkout <branchname> is simpler.Fitzgerald
If you still get the same error after all these steps like I did, try Rare Pleasure's "alternate syntax" git fetch origin remote_branch_name:local_branch_name - it worked when all else failed for meVidal
If you are trying to do this for a remote that you explicitly added (so anything other than origin) you will need to do git remote update before your fetch will fetch that remote. Otherwise you get messages like Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit? Please add this to the answer and save people hours worth of reading the same answers that only work for origin.Silverpoint
You should mention that the tab-key completion doesn't print out the apostrophe in the branch name, and that can be a reason it doesn't find it.Geriatric
i just do a git pull to make sure my local git knows about all the remote branches being tracked, and then checkout -b with the --track command.Tympany
I got into this state from a repo clone. The git remote update worked. The git fetch did NOT work until I had checked out a remote tracking branch. After that git fetch worked.Biometry
after I git svn clone --std-layout ..., I have no git remotes only a block of svn-remote in my git config. this causes any remote op to fail. Am I missing something obvious?Hoopes
L
152

Alternate syntax,

git fetch origin remote_branch_name:local_branch_name
Lard answered 23/10, 2009 at 17:52 Comment(8)
This worked for me. My remote branch name isn't origin. I don't know if that makes a difference as I have been drinking vodka.Prefigure
This is not just an alternate syntax, but can work when git checkout -b branch_name origin/branch_name does not workVidal
omg! fnx! u saved me from a headache! git remote update && git fetch didnt work fo me - a didnt see others branches..Cilia
This also fixed my problem when running "git checkout --track origin/remote-branch", which originally gave the same error as OP's before the fix. Thanks!Ligetti
Worked for me after running also the validated answer.Chanda
This helped for me when started from an incomplete clone, i.e. the one with --depth specification.Tuppence
Yes, I suspect the --depth qualifier for the original clone may be at fault here. I had success with git fetch remote_branch_name:local_branch_name but all other advice failed.Dorset
This doesn't give an error message but it also doesn't associate the local branch with the remote branch as with git checkout -b <local-branch> --track <remote>/<remote-branch> and it doesn't set the current branch to <local-branch>. So it's not a replacement for git checkout -b <local-branch> --track <remote>/<remote-branch> at all. It just updates the remote tracking branches and creates <local-branch>.Esch
S
48

After having tried most of what I could read in this thread without success, I stumbled across this one: Remote branch not showing up in "git branch -r"

It turned out that my .git/config file was incorrect. After doing a simple fix all branches showed up.

Going from

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

to

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Did the trick

Stemma answered 5/7, 2013 at 9:33 Comment(5)
That's indeed an odd configuration. It tells git to only fetch the master branch from the remote.Pietrek
I would vote it up 10 times if I could! - this seems to be some thing that new git does when cloningOccasionalism
I had the same problem, it was driving me crazy. Anyone not seeing remote branches, please check this!!Rettarettig
Thank god for your answer :)Rostrum
Mind = blown! Thank you!Cutaway
D
12

Not sure if this is helpful or exactly relevant to your question, but if you are trying to fetch and checkout only a single branch from the remote repository, then the following git commands will do the trick:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch
Dissimilitude answered 23/2, 2011 at 20:42 Comment(0)
S
11

none of the above worked for me. My situation is slightly different, my remote branch is not at origin. but in a different repository.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

tip: if you don't see the remote branch in the following output git branch -v -a there is no way to check it out.

Confirmed working on 1.7.5.4

Seedy answered 11/7, 2011 at 20:33 Comment(2)
arf, just realize VirtualStaticVoid had the same solution!Seedy
+1 for git branch -v -a: I had an incorrectly configured remote that said fetch = +refs/heads/*:refs/remotes/master/* even though the remote was called upstream.Uttermost
G
8

For me what worked was:

git fetch

Which pulls all the refs down to your machine for all the branches on remote. Then I could do

git checkout <branchname>

and that worked perfectly. Similar to the top voted answer, but a little more simple.

Gonsalve answered 26/4, 2012 at 20:38 Comment(0)
A
4

I suspect there is no remote branch named remote-name, but that you've inadvertently created a local branch named origin/remote-name.

Is it possible you at some point typed:

git branch origin/remote-name

Thus creating a local branch named origin/remote-name? Type this command:

git checkout origin/remote-name

You'll either see:

Switched to branch "origin/remote-name"

which means it's really a mis-named local branch, or

Note: moving to "origin/rework-isscoring" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b 

which means it really is a remote branch.

Adopted answered 23/10, 2009 at 18:22 Comment(0)
D
3

It's not very intuitive but this works well for me ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

THEN run the git branch --track command ...

  git branch --track $BRANCH origin/$BRANCH
Dessau answered 19/9, 2011 at 0:34 Comment(0)
L
3

For me I had a typo and my remote branch didn't exist

Use git branch -a to list remote branches

Leman answered 8/12, 2017 at 15:53 Comment(0)
T
1

Could your issue be linked to this other SO question "checkout problem"?

i.e.: a problem related to:

  • an old version of Git
  • a curious checkout syntax, which should be: git checkout -b [<new_branch>] [<start_point>], with [<start_point>] referring to the name of a commit at which to start the new branch, and 'origin/remote-name' is not that.
    (whereas git branch does support a start_point being the name of a remote branch)

Note: what the checkout.sh script says is:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

It is like the syntax git checkout -b [] [remote_branch_name] was both renaming the branch and resetting the new starting point of the new branch, which is deemed incompatible.

Temblor answered 3/6, 2009 at 19:31 Comment(2)
The problem is solved. git checkout -b local-name remote/remote-branch does actually workPietrek
Interesting, what has changed since the first instance of that command (triggering the error message) ?Temblor
M
1

After fetching a zillion times still added remotes didn't show up, although the blobs were in the pool. Turns out the --tags option shouldn't be given to git remote add for whatever reason. You can manually remove it from the .git/config to make git fetch create the refs.

Merozoite answered 29/5, 2012 at 16:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.