当我用git branch -a
列出我的分支时,git会显示我在远程(gitlab(上实际上找不到的远程分支。我试着签出并跟踪这些分支,令我惊讶的是,git做到了。但当我这样做时,例如git push origin :branch_name
,git说远程引用不存在,从而证明我的远程中没有这些分支。因此,我有一个问题,这些分支是否存储在某种本地缓存中?如果是,如何清除?
使用git fetch -p
修剪本地缓存
就像在清理旧的远程git分支时提到的那样,应该使用git remote prune origin
。
我没有使用上面提到的另外两个命令。
我在macOS上遇到了一个奇怪的问题,我会得到虚幻的Uppercase版本的分支,例如,我的远程分支列表会在本地显示Ben/some-branch
,但服务器会显示ben/some-branch
。
git remote prune origin
会(正确地(移除它们,但git fetch --prune
会(错误地(将它们直接带回。非常奇怪。
据我所知,在过去的某个时候,我有一个Ben/something
分支,但由于默认macOS文件系统不区分大小写,.git
元数据挂在(大写(.git/refs/remotes/origin/Ben
文件夹上,并将其用于(小写(远程分支引用。
rm -rf .git/refs/remotes/origin/Ben && git fetch
让我恢复了秩序。
您可以使用git gc
命令从Git存储库中清除已删除的分支数据。
git gc
默认情况下,git gc
将清理任何无法访问的对象并执行其他优化。如果您想运行更激进的垃圾收集操作,可以使用--aggressive
选项:
git gc --aggressive