Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git repository lost its remote branches?

Tags:

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:

  1. How on earth did I get into this state?
  2. Is there a command that can be run to put ".git/refs/remotes" back? (short of a fresh clone, which I've done already).

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) 
like image 473
stochastic Avatar asked Dec 02 '13 21:12

stochastic


People also ask

Does git branch delete remote branch?

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 .

Does git prune delete remote branches?

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.

Does git clone pull down all branches?

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.


1 Answers

[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.

like image 160
torek Avatar answered Sep 24 '22 05:09

torek