我在Github.com上删除了一堆合并的分支,进行了git pull,所有分支仍在显示。
因此,我跑了。
git remote prune origin
它表明在输出中修剪了分支。
但是,我运行时会显示所有已删除的分支
git branch
我认为我做了一些与预期不同的事情?我做了什么如何从本地删除已经从GitHub删除的分支?
它提到了相同的问题,但是我不明白他们的意思,当他们说它从本地删除过时的远程分支时。
答案 0 :(得分:1)
不应该删除它们。
您的本地分支(实际上应简称为“您的分支”)是您的。在这种情况下,只有您的远程跟踪名称 origin/*
不是您的。 1 因此,如果origin
的分支名为{{1} },但不再适用,xyzzy
或git fetch --prune origin
会删除您的git remote prune origin
来匹配origin/xyzzy
缺乏origin
。
它不会触摸您的分支,而这些分支是您的。如果您确定他们现在可以使用,则必须自己删除它们。人们已经编写了脚本来做到这一点,但是这些脚本往往很愚蠢:即使您做出承诺,在合并之前忘记了推送,或者打算搬到另一个分支,他们也会经常删除您的xyzzy
em>,一旦您的xyzzy
被删除,通常为时已晚。因此,请谨慎使用此类脚本。
(对这些命令有一个选项可以告诉他们:如果我有一个本地分支xyzzy
指向与xyzzy
相同的提交,并且删除origin/xyzzy
,也删除我的本地origin/xyzzy
。此外,如果我有xyzzy
,但xyzzy
与我的origin/xyzzy
不不匹配,抱怨并停下来,这样我就可以弄清楚该怎么办。但是他们没有这种选择。)
1 从技术上讲,这些也是您的。只是您的Git已设置好,以便当您的Git调用其Git(位于xyzzy
的Git)并从中获取分支名称和哈希ID时,您的Git 会覆盖您自己的{ {1}}及其更新的origin
。因此,尽管origin/master
是Git存储库的“名称到哈希ID”数据库中的名称,但它通常不是您自己可以控制的名称。您只需让自己的Git镜像他们的Git,使他们的master
成为您的origin/master
。
或者,简而言之:您的Git的master
是Git记住其Git的origin/master
的方式。因此,这是他们的种类。
答案 1 :(得分:0)
就像torek所说的那样,第一个关键点是修剪远程跟踪分支,以确保您要与最新的参考文献列表进行比较。您可以使用
git fetch --prune
然后用:
定位本地“剩余”分支 git for-each-ref --format='%(if)%(upstream:short)%(then)%(else)%(color:bold red)%(end)%(refname:short)' refs/heads
(它们在输出中将显示为红色)
或者(假设您的遥控器名为origin
):
git branch -vv | grep -v origin/
...并且最后一个阶段是使用
手动删除git branch -d <branch>
由于它们显示得很方便,因此您不应遭受多次复制/粘贴的痛苦。如果过时的分支数量通常是庞大的,或者说足够重要,那么也许可以在工作流中进行某些设置以避免重复出现的情况?