git fetch origin --prune不删除本地分支?

yan*_*ano 38 git git-fetch

有一次,我认为git fetch origin --prune删除了服务器上不再存在的本地分支.不知何故,这不是我目前的经历.

我运行了这个命令,并没有删除本地分支.目前尚未检出.我跑去git branch -vv检查这个信息,我明白了

feature/MyGreatFeature           f30efc7 [origin/feature/MyGreatFeature: gone]
Run Code Online (Sandbox Code Playgroud)

所以似乎知道它已经消失了.为什么不删除我的本地分支?

运行 git version 2.7.4 (Apple Git-66)

Bre*_*den 50

以下命令链可用于删除本地分支:

git branch --v | grep "\[gone\]" | awk '{print $1}' | xargs git branch -D
Run Code Online (Sandbox Code Playgroud)
  • git branch --v详细列出本地分支
  • grep "[gone]"查找远程分支消失的所有分支
  • awk '{print $1}'只输出匹配的本地分支的名称
  • xargs git branch -D删除所有匹配的本地分支

这应该适用于 MacOS 以及 *nix 环境。

  • 这是一个很好的解决方案,但现在 git 默认使用系统语言,并且 [gone] 可能是不同的字符串 (3认同)

tor*_*rek 45

各种修剪选项(git remote update --prune,git remote prune,git fetch --prune)删除远程跟踪分支.1

您需要手动删除不再需要的本地分支,或者如果远程跟踪分支不再存在,则更改或删除其上游设置.请注意,每个本地分支都可以记录现在甚至从未存在的远程和/或分支.在这种情况下,Git主要表现为那些本地分支没有上游集,除了从版本1.8.5开始,几个命令报告上游"已消失"或无效,并且可能建议使用--unset-upstream.


1更准确地说,它们在从命令行执行refspec映射或fetch从配置中删除行后删除目标引用.因此,对于获取镜像,它们可以删除本地分支.但是,大多数克隆都没有设置为fetch镜像.

最近有一些针对复杂映射的错误修复,以确保Git在某些情况下不会修剪映射分支.对于任何普通的存储库 - 普通克隆或纯获取镜像 - 这些修复都没有效果; 只有在fetch配置复杂的情况下,它们才有意义


Jua*_*gui 11

这就是我使用 Powershell 的方式。

PS> git branch --v | ? { $_ -match "\[gone\]" } | % { -split $_ | select -First 1 } | % { git branch -D $_ }
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建一个别名,如:

PS> Function func_gitprune { git branch --v | ? { $_ -match "\[gone\]" } | % { -split $_ | select -First 1 } | % { git branch -D $_ } }

PS> Set-Alias -Name gitprune -Value func_gitprune
Run Code Online (Sandbox Code Playgroud)

并在每次需要时通过运行来执行它

PS> gitprune
Run Code Online (Sandbox Code Playgroud)

  • 充满力量的外壳!! (2认同)

小智 9

你想要的命令是

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

这个问题几乎是一字不差地找到了你想要的东西.

  • 由于某种原因不起作用 (5认同)
  • 对它"成功"(没有输出)没有任何反应,分支仍然有"消失"标签 (5认同)
  • @jonathan:`git remote prune origin`只删除你的远程跟踪分支(例如`remotes/origin/mybranch`).它不会删除您的本地分支(例如`mybranch`).你必须分开删除它们. (3认同)