Why is it not a commit and a branch cannot be created from it?
Solution 1
The question is complex / convolute, the answer is simple. There was a mismatch between the alias and machine3. The alias for the remote that has been used, was not for machine3. The machine3 had another alias.
Solution 2
For those who found this searching for an answer to fatal: 'origin/remote-branch-name' is not a commit and a branch 'local-branch-name' cannot be created from it
, you may also want to try this first:
git fetch --all
If you run git checkout -b local-branch-name origin/remote-branch-name
without fetch
ing first, you can run into that error.
The reason it says "is not a commit" rather than something clearer like "branch doesn't exist" is because git takes the argument where you specified origin/remote-branch-name
and tries to resolve it to a commit hash. You can use tag names and commit hashes as an argument here, too. If they fail, it generates the same error. If git can't resolve the branch you provide to a specific commit, it's usually because it doesn't have the freshest list of remote branches. git fetch --all
fixes that scenario.
The --all
flag is included in case you have multiple remotes (e.g. origin
, buildserver
, joespc
, etc.), because git fetch
by itself defaults to your first remote-- usually origin
. You can also run fetch
against a specific remote; e.g., git fetch buildserver
will only fetch all the branches from the buildserver
remote.
To list all your remotes, run the command git remote -v
. You can omit the --all
flag from git fetch
if you only see one remote name (e.g. origin
) in the results.
Solution 3
We had this error:
fatal: 'origin/newbranch' is not a commit and a branch 'newbranch' cannot be created from it
because we did a minimalistic clone using:
git clone --depth 1 --branch 'oldbranch' --single-branch '[email protected]:user/repo.git'
For us the minimalistic fix was:
git remote set-branches --add 'origin' 'newbranch'
git fetch 'origin'
git checkout --track 'origin/newbranch'
Assuming the remote is called 'origin' and the remote branch is called 'newbranch'.
Solution 4
I managed to fix this with this settings, just update the config with this command
git config -e --global
and add this config.
[remote "origin"]
url = https://git.example.com/example.git (you can omit this URL)
fetch = +refs/heads/*:refs/remotes/origin/*
and then you can git fetch --all
Solution 5
If you're checking out a branch from a tag (like git checkout -b XXXX v0.1.1
) , you can try git fetch --tags
first.
Roman
Updated on July 06, 2022Comments
-
Roman almost 2 years
I need to work with an intricate configuration of repositories. I have 5 of them:
- A remote central repository on machine 1.
- My local repository on my notebook (machine 2).
- A bare repository on machine 3.
- A repository on machine 3.
- A repository on machine 4 where we do code review.
So, my understanding that it works this way:
- On my laptop (machine 2) I clone / pull from the central repository located on machine 1.
- I push the local repo to the machine 3 (using the bare repository as a "intermediate").
Now I did some changes on the machine 3 and I want to push these changes to machine 4. Here are the instructions that I need to follow:
- On machine 3 do all work in your test-branch, commit.
- Push to your bare repo on machine 3: git push origin test-branch
- On your laptop: fetch new commits from the machine-3 repo: git fetch machine3
- Check out your branch from machine 3: git checkout -b test-branch machine-3/test-branch
- Fetch commits from machine-4: git fetch origin
- git rebase origin/master
- git push origin HEAD:refs/for/master
I have problems with step 4. I get the following error:
fatal: 'machine3/test-branch' is not a commit and a branch 'test-branch' cannot be created from it
ADDED
When I execute
git rev-parse machine3/test-branch
On my laptop (machine 2) I get:
machine3/test-branch fatal: ambiguous argument 'machine3/test-branch': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'
-
Silly Freak almost 5 yearsfor me
git fetch origin
git fetch origin master
did not help, I had togit fetch origin refs/heads/master:refs/remotes/origin/master
-
Kristy Welsh over 4 years@SillyFreak that's the only thing that worked for me.
-
SystemsInCode over 3 years@SillyFreak - I was failing to create an tracking branch for an upstream but it started working after : git fetch upstream refs/heads/master:refs/remotes/upstream/My-Remote-Branch-Name
-
François Beaune over 3 yearsIt worked for me too. I had remove my only remote to get rid of all tracking branches at once, and that line was gone.
-
Husam Ibrahim almost 3 yearsThank you! Been running in circles for an hour till I found your answer :)
-
nantitv over 2 yearsFor me the same error occured when I made a spelling mistake in my remote branch name.
-
Okpo over 2 yearswhy is the answer voted down pls? I'd like to know, afterall I only mentioned the way I solve a similar problem.
-
Atul Arvind about 2 yearsthanks, it solves my issue for fetching remote branches.