Reputation: 505
Someone else on my team created a new git branch, committed and pushed to the usual remote that we work with. When I try to check out this branch, I get this:
% git checkout 12382
fatal: Cannot switch branch to a non-commit '12382'
I have not had trouble checking out other branches from this repository; tried checking another one out right after this (one that I did not have a local copy of), and it worked fine.
I tried building a server with this branch on our Go pipeline, it worked fine - which means the server was successful in checking out that branch.
Tried this to check the status of things:
% git remote show origin
* remote origin
Fetch URL: [email protected]:mycompany/myrepository.git
Push URL: [email protected]:mycompany/myrepository.git
HEAD branch: stage
Remote branches:
10112 tracked
10198 tracked
10678 tracked
...
12382 tracked <<<---
...
Local branches configured for 'git pull':
...
Local refs configured for 'git push':
...
Could anyone suggest how to fix this? What went wrong?
Upvotes: 32
Views: 25161
Reputation: 26
although old issue i didn't find god answer on the net so adding below which worked for me: git checkout --track origin/
Upvotes: 0
Reputation: 1975
% git switch -t origin/12382
Branch '12382' set up to track remote branch '12382' from 'origin'.
Switched to a new branch '12382'
This seems to have worked for me. I used to use git checkout
but I might start using git switch
now, to change branches.
In my case, someone used the bug tracking system ticket number as the branch name without an alphabetic prefix.
git switch
is since git 2.23.
Upvotes: 7
Reputation: 265564
Git is confused, because 12382
looks like a commit hash. Use the fully qualified name to checkout the branch:
git checkout refs/heads/12382 --
or, if it's a remote branch:
git checkout refs/remotes/origin/12382 --
Upvotes: 35
Reputation: 36317
The question is an edge case and it's already been answered.
I'll answer the error on a more general level:
To be able to switch/checkout to something in your source tree it must be of type:
git checkout: 90392aeda17d730d472493bc5a36237407c80979
or perhaps just do the first 7 digits ``git checkout: 90392ae`git checkout V2.0.3
git checkout newLogin
git checkout HEAD^1
So if you are switching to something that is none of them, like you mistyped your branch name, git would give you this error.
Cannot switch branch to a non-commit means the think you are trying to checkout to something that isn't tree-ish
Upvotes: 1
Reputation: 505
@knittl: thanks that worked, had to do the following additional steps:
% git checkout refs/remotes/origin/12382
Note: checking out 'refs/remotes/origin/12382'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 2d834e4...
% git branch | grep 12382
* (detached from origin/12382)
% git checkout -b 12382
Switched to a new branch '12382'
% git status
On branch 12382
nothing to commit, working directory clean
% git push --set-upstream origin 12382
Branch 12382 set up to track remote branch 12382 from origin.
Everything up-to-date
Upvotes: 11