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

6

我通过git branch -d 分支名称命令删除了某些本地分支,但它们仍然存在于自动补全中(当我键入git checkout,然后按tab键时,我会在列表中看到所有已删除的分支)。

我尝试过运行git gcgit prune命令,但没有任何改变。


你尝试过提交并推送你的更改吗?你可以尝试使用 git branch -D the_local_branch 命令。但要小心。即使分支没有合并,这将删除该分支。 - TheOneWhoPrograms
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

然后它将不再出现在自动完成结果中。

我已经将更改推送到 origin/branchname,然后更改已与 origin/master 合并,并且在远程上删除了 origin/branchname。 我仍然可以在自动完成中看到 branchnameorigin/branchnameorigin/branchname 没问题,我只想删除本地的,因为有太多已删除的分支。 - user1486054
如果你想删除本地文件,那么只需运行我的答案中的第一行。 - Agis
分支已经被删除,git branch -a 不显示任何内容。问题只存在于检出自动完成中。 - user1486054
是的,因为它也存在于远程仓库中。 - Agis
4
我明白了,我只需运行 git remote prune origin 来更新本地仓库。无论如何,感谢你的回答! - user1486054

0

0

你可能尝试删除一个未合并的分支,所以git branch -d 分支名没有删除它。 你可以使用以下命令检查该分支是否仍然存在:

git branch -a

如果你非常确定要删除该分支即使它没有被合并,你可以使用以下命令强制删除

git branch -D branchname

git branch -a 只显示远程分支。已删除的本地分支只能在检出自动完成中看到。 - user1486054

0

我曾经遇到过这个问题,之前的解决方案对我没有用。后来发现在仓库中有一个与旧删除分支同名的标签。您可以使用以下命令删除标签:

git tag -d [标签名称]

要远程删除它:

git push origin :refs/tags/[标签名称]

感谢https://nathanhoad.net/how-to-delete-a-remote-git-tag提供的帮助。


-1

我知道这篇文章非常老了,但是我刚遇到了这个问题,在我的情况下,我已经修剪了origin中的分支,但没有修剪origin-http中的分支。

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

一旦我执行了git remote prune origin-http,它就为我解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接