问题
I have cloned a repository, after which somebody else has created a new branch, which I\'d like to start working on. I read the manual, and it seems dead straight easy. Strangely it\'s not working, and all the posts I\'ve found suggest I\'m doing the right thing. So I\'ll subject myself to the lambasting, because there must be something obviously wrong with this:
The correct action seems to be
git fetch
git branch -a
* master
remotes/origin/HEAD --> origin/master
remotes/origin/master
git checkout -b dev-gml origin/dev-gml
At this point there is a problem, for some reason after git fetch
I can\'t see the dev-gml remote branch. Why not? If I clone the repository freshly, it\'s there, so certainly the remote branch exists:
$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev-gml
remotes/origin/master
I\'ve tried git update
, git pull
, git fetch --all
, git pretty-please
in all possible permutations...
回答1:
The problem can be seen when checking the remote.origin.fetch
setting
(The lines starting with $
are bash prompts with the commands I typed. The other lines are the resulting output)
$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master
As you can see, in my case, the remote was set to fetch the master branch specifically and only. I fixed it as per below, including the second command to check the results.
$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
The wildcard *
of course means everything under that path.
Unfortunately I saw this comment after I had already dug through and found the answer by trial and error.
回答2:
I had this issue today on a repo.
It wasn't the +refs/heads/*:refs/remotes/origin/*
issue as per top solution.
Symptom was simply that git fetch origin
or git fetch
just didn't appear to do anything, although there were remote branches to fetch.
After trying lots of things, I removed the origin remote, and recreated it. That seems to have fixed it. Don't know why.
remove with:
git remote rm origin
and recreate with:
git remote add origin <git uri>
回答3:
To track a (new) remote branch as a local branch:
git checkout -b <local branch> <remote>/<remote branch>
or (sometimes it doesn't work without the extra remotes/
):
git checkout -b <local branch> remotes/<remote>/<remote branch>
Edit:
You need to run git remote update
or git remote update <remote>
. Then you can run git branch -r
to list the remote branches.
Helpful git cheatsheets
- Git Cheat Sheet (My personal favorite)
- Some notes on git
- Git Cheat Sheet (pdf)
回答4:
To make it more specific Create a tracking branch, which means you are now tracking a remote branch.
git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental
After which you can
git branch # to see the remote tracking branch "exp" created .
Then to work on that branch do
git checkout branchname
git checkout exp
After you have made changes to the branch. You can git fetch and git merge with your remote tracking branch to merge your changes and push to the remote branch as below.
git fetch origin
git merge origin/experimental
git push origin/experimental
Hope it helps and gives you an idea, how this works.
回答5:
write it from the terminal
git fetch --prune.
it works fine.
回答6:
This could be due to a face palm moment: if you switch between several clones it is easy to find yourself in the wrong source tree trying to pull a non-existent branch. It is easier when the clones have similar names, or the repos are distinct clones for the same project from each of multiple contributors. A new git clone would obviously seem to solve that "problem" when the real problem is losing focus or working context or both.
回答7:
I had to go into my GitExtensions Remote Repositories as nothing here seemed to be working. There I saw that 2 branches had no remote repository configured. after adjusting it looks as follows
Notice branch noExternal3
still shows as not having a remote repository. Not sure what combo of bash commands would have found or adjusted that.
回答8:
We had the same problem and you have to use
git fetch
git push origin branch_name
git branch -r
Hope this help someone facing the same problem
回答9:
I had a similar problem, however in my case I could pull/push to the remote branch but git status
didn't show the local branch state w.r.t the remote ones.
Also, in my case git config --get remote.origin.fetch
didn't return anything
The problem is that there was a typo in the .git/config
file in the fetch line of the respective remote block. Probably something I added by mistake previously (sometimes I directly look at this file, or even edit it)
So, check if your remote entry in the .git/config
file is correct, e.g.:
[remote "origin"]
url = https://[server]/[user or organization]/[repo].git
fetch = +refs/heads/*:refs/remotes/origin/*
来源:https://stackoverflow.com/questions/11623862/fetch-in-git-doesnt-get-all-branches