Git – 如何从结帐自动完成中删除分支

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

我试图让git gcgit prune ,但没有任何变化。

Solutions Collecting From Web of "Git – 如何从结帐自动完成中删除分支"

如果你确定你不想要分支,你可以像这样从本地远程删除它:

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

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

TL; DR – 真正的答案:

 $ git remote prune origin 

稍微更多的细节:

如果foo-branch没有合并到你当前的分支中, git branch -d foo-branch将无法删除。

如果他们已经被合并,清理远程的旧分支也是一个好主意。 你可以从命令行通过git push origin :foo-branch

然而,旧的“幻影”分行foo分支将继续自动完成git结帐。 显然,git正在缓存远程机器上可用的分支。 通过电话:

 $ git remote prune origin 

您可以清除git远程上可用分支的本地缓存。

我可以在OSX上重现OP的问题git 2.2.1(可能更早的版本)。

你可能试图删除一个未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]

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

请注意,在Git 2.13(Q2 2017)中git push origin :branchname分支删除( git push origin :branchname )更容易,因为完成脚本学习完成“ git push --delete b<TAB> ”(完成要删除的分支名称) 。

参见ÆvarArnfjörðBjarmason( avar )的 commit 723c1d5 (2017年4月22日) 。
(由Junio C gitster合并- gitster -于2017年4月26日提交f70b541 )