Reputation: 131228
I need to work with an intricate configuration of repositories. I have 5 of them:
So, my understanding that it works this way:
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:
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>...]'
Upvotes: 109
Views: 235930
Reputation: 11
General Solution:
git fetch origin <base_branch>
git checkout -b <new_brach> origin/<base_branch>
Your issue might be solved in this way:
git fetch machine-3 test-branch
git checkout -b local-test-branch machine-3/test-branch
Upvotes: -1
Reputation: 4088
I generally create the branches via UI on gitlab/github and then switch to it in local.
I was running this command
git fetch origin
git checkout --track origin/my-branch
And I got the same error
fatal: 'origin/my-branch' is not a commit and a branch 'my-branch' cannot be created from it
It turns out, my-branch
didn't exist on the remote repository. I had mistakenly created it on another repo via UI.
Upvotes: -1
Reputation: 1
I faced the same error and the fix was as simple as creating teh branch in two steps:
Upvotes: 0
Reputation: 1328292
The solution from J.D. Mallen involves git fetch --all
Starting with VSCode 1.53 (Jan. 2021), you will have (issue 110811 and PR 111090):
Changing
autofetch
to a string config which has "current
", "all
" and "off
".This allows users to fetch from all remotes instead of just their
origin
.
For developers working on a Fork, this should make extensions work more intuitively.
So if you set the VSCode setting git.autofetch
to "all
", you won't even have to type git fetch --all
.
Charlie Parker adds in the comments:
What about
git pull
?
That supposes you are on a current branch with a remote tracking branch already set up.
The original question does not have such a branch in place, which means git pull would not know what to merge from fetched branches.
Upvotes: -1
Reputation: 372
I just encountered this when I used the "copy" tool on GitHub next to the branch name of a coworker's PR. His branch was named like coworker/ticket-number
and git checkout --track coworker/ticket-number
was what came out of the paste.
When I went back to my usual workflow, using git branch -r | grep ticket-number
I found that the actual branch name I needed to use was origin/coworker/ticket-number
.
Upvotes: 0
Reputation: 69
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
, another possibility we just found is the remote branch has been merged already :embarrassed:
Upvotes: 0
Reputation: 21771
Check your git config in .git folder, and validate this content
[core]
repositoryformatversion = 0
fileMode = false
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/ABC/project0001.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
[pull]
ff = no
[branch "develop"]
remote = origin
merge = refs/heads/develop
[remote "origin"]
<-- this section
Upvotes: 0
Reputation: 2743
The branch does not exist on the remote origin specified. Double check: You might be trying to pull oranges from a grapes tree.
Upvotes: 0
Reputation: 2366
My issues was I had a space in my new branch name
Issue:
git checkout -b my-new-branch name
instead of
git checkout -b my-new-branch-name
Upvotes: -1
Reputation: 1
I had the problem where I git checkout name-branch
and it was created but when i
check the branch with git branch
nothing happens
after hours of trying to figure out I tried to run the command git push GitHub-URL name-branch
and it pushes the commit directly to the branch
hope this helps
Upvotes: 0
Reputation: 146
I found this question troubleshooting simpler problem: I recieved same error trying to create a lobal branch from remote. I resolved it by creating branch from commit hash:
git ls-remote origin remote-branch
returned
<hash> refs/heads/remote-branch
git checkout -b local-branch <hash>
Upvotes: 7
Reputation: 1072
We were having this exact error in a Windows machine running gitbash on a folder synced with google drive.
It was caused by having the feature "Enable experimental built-in file system monitor" enabled.
After uninstalling and reinstalling gitbash with this feature disabled it was fixed.
Upvotes: 1
Reputation: 2491
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'.
Upvotes: 89
Reputation: 5263
For this issue:
fatal: 'machine3/test-branch' is not a commit and a branch 'test-branch' cannot be created from it
For me, I should have checked out to test-branch
first, then it worked fine and created a new branch from test-branch
.
Upvotes: 0
Reputation: 417
I used git workflow in visual studio code as shown in the below diagram to solve mine:
Upvotes: -2
Reputation: 3205
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
Upvotes: 20
Reputation: 4689
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.
Upvotes: 211
Reputation: 5543
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.
Upvotes: 4
Reputation: 131228
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.
Upvotes: 0