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

use*_*677 5 git github

我在 Github.com 上删除了一堆合并分支,我执行了 git pull,但我的所有分支仍然显示。

于是我跑了..

git remote prune origin
Run Code Online (Sandbox Code Playgroud)

它表明分支在输出中被修剪。

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

git branch
Run Code Online (Sandbox Code Playgroud)

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

在这篇文章中: git remote prune origin 不会删除本地分支,即使其上游远程分支被删除

它提到了同样的问题,但我不明白他们的意思,当他们说它会从本地删除陈旧的远程分支时。

tor*_*rek 7

它不应该删除它们。

\n\n

你的本地分支\xe2\x80\x94实际上应该被称为“你的分支”\xe2\x80\x94是你的。在这种情况下,只有您的远程跟踪名称origin/*不是您的。1 因此,如果之前origin有一个分支命名xyzzy,但现在不再存在,git fetch --prune origin或者git remote prune origin删除您的分支origin/xyzzy以匹配origin缺少的xyzzy- 。

\n\n

它不会触及你的树枝,那是你的。如果您确定它们现在可以删除,则必须自行删除它们。人们编写了脚本来执行此操作,但据说脚本往往很愚蠢:xyzzy 即使您在合并之前忘记推送了提交,或者打算移动到另一个分支,它们通常也会删除您的提交,一旦xyzzy删除了您的分支,它就会\'往往为时已晚。所以要小心这样的脚本。

\n\n

(如果这些命令有一个选项告诉他们: 如果我有一个本地分支xyzzy指向与 相同的提交origin/xyzzy,并且您要删除origin/xyzzy,也删除我的本地分支xyzzy。此外,如果我有,xyzzy但是符合我的,抱怨并停止,这样我就可以弄清楚该怎么办。origin/xyzzyxyzzy 但他们没有这样的选择。)

\n\n
\n\n

1从技术上讲,这些也属于您。只是你的 Git 设置为这样,当你的 Git 调用位于 \xe2\x80\x94 的 Git origin\xe2\x80\x94 并从中获取分支名称和哈希 ID 时,你的 Git 会用它们的覆盖自己的Gitorigin/master更新master。因此,虽然origin/master是 Git 存储库的“名称到哈希 ID”数据库中的名称,但它不是您通常可以自己控制的名称。您只需让您的 Git 镜像他们的 Git,然后他们master就成为您的origin/master.

\n\n

或者,简而言之:您的 Gitorigin/master是您的 Git 记住其 Git 的方式master。所以这有点他们的。

\n