In my current repo I have the following output:
$ git branch -a
* master
remotes/origin/master
remotes/public/master
I want to delete remotes/public/master
from the branch list:
$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.
Also, the output of git remote
is strange, since it does not list public
:
$ git remote show
origin
How can I delete 'remotes/public/master' from the branch list?
Update, tried the git push
command:
$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
git remote prune [remote-name]
or git fetch -p [remote-name]
not work in your scenario? Doing it with git gc
is a lot more forceful than is normally needed.
git remote prune [remote-name]
won't work with git svn, although neither does git gc
... git branch -rd origin/name
does work though. @Casey, you probably should select the second answer -it's slightly less dangerous.
master
...particularly when deleting on the remote.
You might be needing a cleanup:
git gc --prune=now
or you might be needing a prune:
git remote prune public
prune Deletes all stale tracking branches under
However, it appears these should have been cleaned up earlier with
git remote rm public
rm Remove the remote named
So it might be you hand-edited your config file and this did not occur, or you have privilege problems.
Maybe run that again and see what happens.
Advice Context
If you take a look in the revision logs, you'll note I suggested more "correct" techniques, which for whatever reason didn't want to work on their repository.
I suspected the OP had done something that left their tree in an inconsistent state that caused it to behave a bit strangely, and git gc
was required to fix up the left behind cruft.
Usually git branch -rd origin/badbranch
is sufficient for nuking a local tracking branch , or git push origin :badbranch
for nuking a remote branch, and usually you will never need to call git gc
All you need to do is
git fetch -p
It'll remove all your local branches which are remotely deleted.
If you are on git 1.8.5+ you can set this automatically
git config fetch.prune true
or
git config --global fetch.prune true
git push public :master
This would delete the remote branch named master
as Kent Fredric has pointed out.
To list remote-tracking branches:
git branch -r
To delete a remote-tracking branch:
git branch -rd public/master
git branch -rd removed_remote/branch
worked for me, while the git gc --prune=now
was worthless.
git prune
without any issues, but my co-worker who forked our main repo **COULD ONLY ** use the git branch -rd public/master
-style solution to clean his environment up.
git branch -rd public/master
was what I was missing. I had heroku/master
and herkou/master
... lol woops
All you need to do is
$ git branch -rd origin/whatever
It's that simple. There is no reason to call a gc here.
git branch -rd $(git branch -r)
then reestablish the valid ones by doing a fetch.
git config -e
to rename my remote. I renamed the remote mine
to origin
. Then, this was the solution that worked best for me: git branch -rd $(git branch -r | grep 'mine/')
git gc --prune=now
is not what you want.
git remote prune public
or git remote prune origin
# if thats the the remote source
is what you want
The accepted answer didn't work for me when the ref was packed. This does however:
$ git remote add public http://anything.com/bogus.git
$ git remote rm public
In my case I was trying to delete entries that were saved in .git/packed-refs
. You can edit this plain text file and delete entries from it that git br -D
doesn't know how to touch (At least in ver 1.7.9.5).
I found this solution here: https://stackoverflow.com/a/11050880/1695680
git gc
, when it packs your commits into a highly-compressed archive it also moved the references into a single plain text file, possibly for optimization purposes; I hope future versions of git can git br -D ...
packed refs.
git push origin --delete <branch name>
Referenced from: http://www.gitguys.com/topics/adding-and-removing-remote-branches/
I didn't know about git branch -rd
, so the way I have solved issues like this for myself is to treat my repo as a remote repo and do a remote delete. git push . :refs/remotes/public/master
. If the other ways don't work and you have some weird reference you want to get rid of, this raw way is surefire. It gives you the exact precision to remove (or create!) any kind of reference.
Only slightly related, but still might be helpful in the same situation as we had - we use a network file share for our remote repository. Last week things were working, this week we were getting the error "Remote origin did not advertise Ref for branch refs/heads/master. This Ref may not exist in the remote or may be hidden by permission settings"
But we believed nothing had been done to corrupt things. The NFS does snapshots so I reviewed each "previous version" and saw that three days ago, the size in MB of the repository had gone from 282MB to 33MB, and about 1,403 new files and 300 folders now existed. I queried my co-workers and one had tried to do a push that day - then cancelled it.
I used the NFS "Restore" functionality to restore it to just before that date and now everythings working fine again. I did try the prune previously, didnt seem to help. Maybe the harsher cleanups would have worked.
Hope this might help someone else one day!
Jay
I had a similar problem. None of the answers helped. In my case, I had two removed remote repositories showing up permanently.
My last idea was to remove all references to it by hand.
Let's say the repository is called “Repo”. I did:
find .git -name Repo
So, I deleted the corresponding files and directories from the .git folder (this folder could be found in your Rails app or on your computer https://stackoverflow.com/a/19538763/6638513).
Then I did:
grep Repo -r .git
This found some text files in which I removed the corresponding lines. Now, everything seems to be fine.
Usually, you should leave this job to git.
Not sure how I got into the mess, but my error message was slightly different:
> git remote > git branch warning: ignoring broken ref refs/remotes/origin/HEAD * main >
But I was able to fix it by slightly reinterpreting a fix from elsewhere on this page. By this I mean I substituted the keyword HEAD
for the branch name in <remote>/<branch>
. None of the other suggestions people mentioned had worked (gc
, prune
, etc.) so I was running out of ideas and hoping for the best. Anyway, it worked like a charm:
> git remote > git branch -rd origin/HEAD Deleted remote-tracking branch origin/HEAD (was refs/remotes/origin/main). > git branch * main >
I tried everything here and nothing worked. If all else fails, remove the offending branches from the text file '.git/packed-refs', then remove the offending branches from '.git\refs\remotes\origin
Success story sharing
git gc
isn't needed here, butgit remote prune
makes me feel safer than manually deleting things withgit branch -rd
, since git is verifying which remote branches are done.