Git - 如何从结账自动完成中删除分支

问题描述 投票:0回答:6

我已经通过

git branch -d branchname
删除了一些本地分支,但它们仍然存在于自动完成中(当我输入
git checkout
,然后按
tab
键,我在列表中看到所有已删除的分支)。

我尝试过制作

git gc
git prune
,但没有任何改变。

linux git terminal
6个回答
17
投票

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 问题。


2
投票

如果您确定不需要该分支,您可以将其从本地远程中删除,如下所示:

$ git branch -D branchname
$ git push origin :branchname

然后它将停止出现在自动完成结果中。


0
投票

您可能尝试删除

unmerged
分支,因此
git branch -d branchname
尚未删除它。 您可以检查分支是否仍然存在:

git branch -a

如果您真的确定要删除〜分支

even if is not
合并`,您可以使用以下方式强制删除:

git branch -D branchname

0
投票

我遇到了这个问题,之前的解决方案对我不起作用。事实证明,我在存储库中有一个与旧的已删除分支同名的标签。您可以使用以下方法删除标签:

git tag -d [tagname]

远程删除:

git push origin :refs/tags/[tagname]

感谢https://nathanhoad.net/how-to-delete-a-remote-git-tag


0
投票

请注意,在 Git 2.13(2017 年第 2 季度)中,推送分支删除 (

git push origin :branchname
) 更容易,因为完成脚本学会了完成“
git push --delete b<TAB>
”(完成要删除的分支名称)。

参见 commit 723c1d5(2017 年 4 月 22 日),作者:Ævar Arnfjörð Bjarmason (

avar
)
(由 Junio C Hamano --
gitster
--
合并于 commit f70b541,2017 年 4 月 26 日)


-1
投票

我意识到这真的非常旧,但我刚刚遇到了这个问题,就我而言,我修剪了

origin
中的分支,但没有修剪
origin-http
中的分支。

我通常不使用 http 进行克隆,所以这通常不是一个问题,但是......欢迎。

一旦我这样做了

git remote prune origin-http
,它就解决了我的问题。

编辑:哇,投了反对票。 我想,任何善行都会受到惩罚。 下次我就闭嘴了。

© www.soinside.com 2019 - 2024. All rights reserved.