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)
Local branches are branches on your local machine and do not affect any remote branches. git branch is the command to delete a branch locally. -d is a flag, an option to the command, and it's an alias for --delete .
git fetch --prune is the best utility for cleaning outdated branches. It will connect to a shared remote repository remote and fetch all remote branch refs. It will then delete remote refs that are no longer in use on the remote repository.
The idea is to use the git-clone to clone the repository. This will automatically fetch all the branches and tags in the cloned repository. To check out the specific branch, you can use the git-checkout command to create a local tracking branch.
[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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With