Git prune没有删除我的本地分支

Git prune没有删除我的本地分支,git,github,Git,Github,我在Github.com上删除了一堆合并的分支,我做了一次git拉取,我所有的分支仍在显示 于是,我跑了 git remote prune origin 结果表明,这些树枝在输出中被剪掉了 但是,当我运行时,所有已删除的分支都会显示出来 git branch 我想我做了一些不同于我预期的事情?我做了什么?如何从本地删除已从GitHub删除的分支 在本帖中: 它提到了同样的问题,但我不理解他们的意思,当他们说它从本地删除过时的远程分支时。它不应该删除它们 你们当地的分支机构实际上应该被称为“

我在Github.com上删除了一堆合并的分支,我做了一次git拉取,我所有的分支仍在显示

于是,我跑了

git remote prune origin
结果表明,这些树枝在输出中被剪掉了

但是,当我运行时,所有已删除的分支都会显示出来

git branch
我想我做了一些不同于我预期的事情?我做了什么?如何从本地删除已从GitHub删除的分支

在本帖中:


它提到了同样的问题,但我不理解他们的意思,当他们说它从本地删除过时的远程分支时。

它不应该删除它们

你们当地的分支机构实际上应该被称为“你们的分支机构”——是你们的。在本例中,只有您的远程跟踪名称,
origin/*
不是您的。1因此,如果
origin
之前有一个名为
xyzy
的分支,但现在没有了,
git-fetch--prune-origin
git-remote-prune-origin
删除您的
origin/xyzy
以匹配
origin
缺少的-
xyzy

它不会碰你的树枝,那是你的。如果你确定它们现在可以删除,你就必须自己删除它们。人们已经编写了脚本来实现这一点,但他们说脚本往往是愚蠢的:他们经常会删除您的
xyzy
,即使您在mergiing之前忘记推送提交,或者打算移动到另一个分支,而且一旦您的
xyzy
被删除,通常都为时已晚。所以要小心使用这些脚本

(如果我有一个本地分支
xyzy
,它指向与
origin/xyzy
相同的提交,并且您正在删除
origin/xyzy
,那么也可以删除我的本地
xyzy
。此外,如果我有
xyzy
,但是
origin/xyzy
没有not匹配我的
xyzy
,投诉并停止,这样我就可以知道该怎么办。但他们没有这样的选择。)


1从技术上讲,这些也是你的。只是你的Git被设置为,当你的Git调用他们的Git时,即
origin
——并从中获取分支名称和散列ID,你的Git会用更新的
master
覆盖你自己的
origin/master
。因此,
origin/master
是你的Gi中的一个名称t存储库的“名称到散列ID”数据库,它不是一个您通常会控制自己的名称。您只需让您的Git镜像其Git,使其
主文件
成为您的
源文件/master

或者,简而言之:你的Git的
源代码/master
是你的Git记忆他们Git的
主代码的一种方式。所以它是属于他们的。

如前所述,第一个关键点是删减你的远程跟踪分支,以确保你正在与新的引用列表进行比较。你可以使用

git fetch --prune
然后用以下标记标记本地“剩余”分支

 git for-each-ref --format='%(if)%(upstream:short)%(then)%(else)%(color:bold red)%(end)%(refname:short)' refs/heads
(它们将在输出中显示为红色)

或者(假设您的遥控器名为
origin
):

…最后一个阶段是使用

git branch -d <branch>
git分支-d

由于您将它们显示在手边,因此复制/粘贴的次数不应超过几次。如果过时分支的数量经常过多,或者说足够重要,那么可能需要在工作流中设置一些内容以避免重复出现这种情况?

那么,如何删除已从中删除的本地分支GitHub?您的分支尚未从GitHub中删除。只有GitHub的分支已从GitHub中删除!@torek我猜他的意思是:在GitHub的对应分支已不存在的情况下,如何删除本地分支?…答案可能是“手动,一个接一个”:
git branch-d
@Romanvaleri:就这样。正如我所说的,如果有一个git命令可以做到这一点,这可能会很好,但是没有,而且如果在GitHub端,任何真正合并您的pull请求的人都使用“rebase and merge”或“squash and merge”,那么它也不起作用。因此它的用处有限(但仍然有用)。
git branch -d <branch>