我已经通过
git branch -d branchname
删除了一些本地分支,但它们仍然存在于自动完成中(当我输入git checkout
,然后按tab
键,我在列表中看到所有已删除的分支)。
我尝试过制作
git gc
和git prune
,但没有任何改变。
TL;DR - 真正的答案:
$ git remote prune origin
更详细一点:
如果 foo-branch 没有合并到当前分支,git branch -d foo-branch
将无法删除。
如果旧分支已经被合并,那么清理遥控器上的旧分支也是一个好主意。您可以通过
git push origin :foo-branch
从命令行执行此操作。
但是,旧的“幻影”分支 foo-branch 将保留以自动完成 git checkout。显然 git 正在缓存远程上可用的分支。致电:
$ git remote prune origin
您可以清除 git 远程上可用分支的本地缓存。
我可以在 OSX 上重现 git 2.2.1(可能还有更早版本)的 OP 问题。
如果您确定不需要该分支,您可以将其从本地和远程中删除,如下所示:
$ git branch -D branchname
$ git push origin :branchname
然后它将停止出现在自动完成结果中。
您可能尝试删除
unmerged
分支,因此 git branch -d branchname
尚未删除它。
您可以检查分支是否仍然存在:
git branch -a
如果您真的确定要删除〜分支
even if is not
合并`,您可以使用以下方式强制删除:
git branch -D branchname
我遇到了这个问题,之前的解决方案对我不起作用。事实证明,我在存储库中有一个与旧的已删除分支同名的标签。您可以使用以下方法删除标签:
git tag -d [tagname]
远程删除:
git push origin :refs/tags/[tagname]
请注意,在 Git 2.13(2017 年第 2 季度)中,推送分支删除 (
git push origin :branchname
) 更容易,因为完成脚本学会了完成“git push --delete b<TAB>
”(完成要删除的分支名称)。
参见 commit 723c1d5(2017 年 4 月 22 日),作者:Ævar Arnfjörð Bjarmason (
avar
)。gitster
-- 合并于 commit f70b541,2017 年 4 月 26 日)
我意识到这真的非常旧,但我刚刚遇到了这个问题,就我而言,我修剪了
origin
中的分支,但没有修剪origin-http
中的分支。
我通常不使用 http 进行克隆,所以这通常不是一个问题,但是......欢迎。
一旦我这样做了
git remote prune origin-http
,它就解决了我的问题。
编辑:哇,投了反对票。 我想,任何善行都会受到惩罚。 下次我就闭嘴了。