When I list my branches with git branch -a, git shows me remote branches I can't actually find on my remote(gitlab). I tried to checkout and track those branches, and to my big surprise, git did it. But when I do for example git push origin :branch_name, git says that the remote ref does not exist, thus proving that I do not have those branches in my remote. Hence I have a question, are those branches stored in some kind a local cache? And if yes, how to clear it?
- 8,084
- 8
- 48
- 62
- 2,536
- 5
- 30
- 59
4 Answers
Like mentioned on cleaning up old remote git branches, you should use git remote prune origin.
I didn't use the other two commands mentioned there.
I had a weird issue on macOS where I would get phantom Uppercase versions of branches, e.g. my remote branch listing would show Ben/some-branch locally, but the server would show ben/some-branch.
git remote prune origin would (correctly) remove them, but git fetch --prune would (incorrectly) bring them right back. Very weird.
Best I can tell, at some point in the past, I had a Ben/something branch, but because the default macOS filesystem is case-insensitive, the .git metadata was hanging onto a (capitalized) .git/refs/remotes/origin/Ben folder and using it for the (lowercase) remote branch refs.
rm -rf .git/refs/remotes/origin/Ben && git fetch put me back in order.
- 13,251
- 7
- 69
- 80
-
2Thank you! this is the only answer that helped me with my phantom Uppercase version of branch. It was super annoying. – Ecaterina Galeru Sep 13 '22 at 10:44
You can clear the deleted branch data from your Git repository using the git gc command.
git gc
By default, git gc will clean up any unreachable objects and perform other optimizations. If you want to run a more aggressive garbage collection operation, you can use the --aggressive option:
git gc --aggressive
- 17,147
- 12
- 117
- 144