Reputation: 3413
I have a git repository that has a remote set up ("git fetch" works), but it doesn't have any remote branches: the ".git/refs/remotes" folder doesn't exist, and
git branch -r
returns nothing (empty list, no branches). Yet the actual remote repository does have a branch. If I re-clone the remote repo, I get another local repo that does have remote branches.
I didn't think this state was possible. My questions:
Additional Information
"git config --get remote.origin.fetch" is blank (i.e. the command produces no output)
"git remote show origin" shows
$ git remote show origin
* remote origin
Fetch URL: <correct remote url here>
Push URL: <correct remote url here>
HEAD branch: master
Local ref configured for 'git push':
master pushes to master (up to date)
Upvotes: 32
Views: 34807
Reputation: 487755
[Edit, April 2017] If you made your original clone with --single-branch
, your remote.origin.fetch
setting will be the problem. If you used a --depth
limit, that too implies --single-branch
. Restore the normal remote.origin.fetch
value described below and you will get a fuller clone.
Normally, just running git fetch
should restore your remote-tracking branches.
If git fetch
is not restoring them, then I wonder: what goes git config --get-all remote.origin.fetch
print? (This assumes the remote is named origin
; if not, substitute the actual name.) It should be set to +refs/heads/*:refs/remotes/origin/*
(again assuming the name origin
). Special cases (such as fetching notes) might add more lines.
Upvotes: 52
Reputation: 331
This solved my problem
git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
When I excute vi .git/config
, I loose the fetch line:
fetch = +refs/heads/*:refs/remotes/origin/*
Upvotes: 33