546

当我这样做git fetch origin并且 origin 有一个已删除的分支时,它似乎没有在我的存储库中更新它。当我这样做时git branch -r,它仍然显示origin/DELETED_BRANCH

我怎样才能解决这个问题?

4

7 回答 7

990

您需要执行以下操作

git fetch -p

-por参数将--prune更新远程分支的本地数据库。

于 2011-04-22T02:08:01.520 回答
98

来自http://www.gitguys.com/topics/adding-and-removing-remote-branches/

有人从远程仓库删除分支后,当用户执行 git pull 或 git fetch 时,git 不会自动删除本地仓库分支。但是,如果用户希望从本地存储库中删除所有已在远程存储库中删除的跟踪分支,则可以键入:

git远程修剪起源

请注意,来自的 -p 参数git fetch -p实际上意味着“修剪”。
无论您选择哪种方式,不存在的远程分支都将从您的本地存储库中删除。

于 2012-05-04T08:19:32.087 回答
35

您需要执行以下操作

git fetch -p

为了同步您的分支列表。git手册

-p,--prune
获取后,删除遥控器上不再存在的任何远程跟踪引用。如果仅由于默认标签自动跟随或由于--tags选项而获取标签,则不会对其进行修剪。但是,如果由于显式 refspec(在命令行或远程配置中,例如,如果远程使用该--mirror选项克隆)而获取标签,那么它们也会受到修剪。

我个人喜欢使用git fetch origin -p --progress,因为它显示了一个进度指示器。

于 2015-09-22T11:29:16.337 回答
18

这对我有用。

git remote update --prune
于 2015-03-03T20:58:50.887 回答
9

关于git fetch -p,它的行为在 Git 1.9 中发生了变化,只有 Git 2.9.x/2.10 反映了这一点。

请参阅Jeff King ( )的提交 9e70233(2016 年 6 月 13 日) 。(由Junio C Hamano 合并 -- --提交 1c22105中,2016 年 7 月 6 日)peff
gitster

fetch:在获取之前进行修剪的文档

这在10a6cc8中进行了更改(fetch --prune:在获取之前运行 prune,2014-01-02),但似乎在那次讨论中没有人意识到我们正在明确宣传“之后”。

因此,文档现在指出:

获取之前,删除远程上不再存在的任何远程跟踪引用

那是因为:

当我们frotz/nitfol从之前的 fetch 中有一个名为“”的远程跟踪分支,而上游现在有一个名为“ frotz”的分支,那么 fetch 将无法从上游删除frotz/nitfol带有“ git fetch --prune”的“”。git 会通知用户使用 " git remote prune" 来解决问题。

fetch --prune通过在获取操作之前移动修剪操作来改变“ ”的工作方式。这样,它不会警告用户发生冲突,而是自动修复它。

于 2016-07-09T19:55:37.867 回答
2

如果git fetch -p origin由于某种原因无法正常工作(例如因为原始存储库不再存在或您无法访问它),另一种解决方案是通过从存储库的根目录删除本地存储在该分支上的信息:

rm .git/refs/remotes/origin/DELETED_BRANCH

或者如果它通过删除相应的行来存储在文件.git/packed-refs中,就像

7a9930974b02a3b31cb2ebd17df6667514962685 refs/remotes/origin/DELETED_BRANCH
于 2020-11-30T22:35:35.147 回答
0

对于gitApple git更新的版本2.x,这对我有用:

git remote prune origin
于 2021-09-03T09:19:34.617 回答