Git远程分支已删除,但仍显示在“ branch -a”中


552

假设我coolbranch在存储库中有一个分支。

现在,我决定使用以下方式(远程和本地)删除它:

git push origin :coolbranch
git branch -D coolbranch

大!现在,该分支实际上已删除。

但是当我跑步时

git branch -a

我仍然得到:

remotes/origin/coolbranch

需要注意的是,当我克隆一个新的存储库时,一切都很好,git branch -a并且不显示分支。

我想知道-有没有一种方法可以从branch -a列表中删除分支而不克隆新实例?



58
如果您git fetch -p(或git pull -p),则将修剪远程分支。
yoyo

Answers:


688

git remote prune origin,如另一个答案中所建议,将删除所有这些陈旧的分支。在大多数情况下,这可能就是您想要的,但是如果您只想删除该特定的远程跟踪分支,则应该执行以下操作:

git branch -d -r origin/coolbranch

-r很容易忘记...)

-r在这种情况下,将“列出或删除-d远程跟踪分支(如果与一起使用)”。根据此处找到的Git文档:https : //git-scm.com/docs/git-branch


11
git remote prune origin或任何形式的git fetch --prune举报都不适合我。...但是git branch -d -r origin/feature/branch-name做了。我不确定它是否与feature命名空间下的内容有关(git flow),但这是它的工作方式,以防万一有谷歌用户发现发生这种情况。
Misterparker '16

8
是否有必要这样做的原因?将这些不存在的分支名称保留在列表中并且不自动修剪它们似乎很糟糕。
akronymn

296

尝试:

git remote prune origin

Git远程文档

修剪

删除<名称>下的所有过时的远程跟踪分支。这些过时的分支已从<name>引用的远程存储库中删除,但仍可在本地使用“ remotes / <name>”。

使用--dry-run选项,报告将修剪哪些分支,但实际上不修剪它们。


1
为完整git pull --prunegit remote update --prune
起见

230

别忘了真棒

git fetch -p

提取并修剪所有来源。


为了完整性:它必须是相同的git remote prune origin,以及类似的git pull --prune在提到stackoverflow.com/a/6127884/94687stackoverflow.com/a/17983126/94687分别。和:git remote update --prune
imz –伊万·扎哈拉雅舒夫(Ivan Zakharyaschev)

2
但是,如果您运行,分支仍将可见git branch -a
Nikhil Sahu

1
@NikhilSahu:我看不到使用git branch -a
user276648 '17

20

在我们的特定情况下,我们将Stash用作我们的远程Git存储库。我们尝试了所有先前的答案,但没有任何效果。我们最终不得不执行以下操作:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

然后,当用户去进行更改时,他们需要执行以下操作:

git fetch -p

git branch -d branch-name为我工作。通知-D-d。实际上,当我尝试使用大写字母D时,-D它创建了一个新的分支,名称为-D
RP-

1
“ -D”是一种强制删除的方式,无论其推送或合并状态如何。显然要小心使用它,但是在很多情况下,这是有必要的。
Shadowvail

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.