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

vbopmzt1  于 2022-11-20  发布在  Git
关注(0)|答案(7)|浏览(240)

有一次我以为git fetch origin --prune删除了服务器上不再存在的本地分支。不知何故,这不是我目前的经验。
我运行了这个命令,本地分支没有被删除。它是 not 当前 checkout 。我运行git branch -vv来检查这个信息,我看到

  1. feature/MyGreatFeature f30efc7 [origin/feature/MyGreatFeature: gone]

所以它似乎知道它走了,为什么它不会删除我的本地分支呢?
运行git version 2.7.4 (Apple Git-66)

esbemjvw

esbemjvw1#

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

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

这应该在MacOS以及 *nix环境下都可以使用。

sf6xfgos

sf6xfgos2#

各种清理选项(git remote update --prunegit remote prunegit fetch --prune)* 仅 * 删除远程跟踪分支。1
您需要手动删除不再需要的本地分支,或者如果远程跟踪分支不再存在,则更改或移除其上游设置。注意,每个本地分支都可以记录一个现在不存在,甚至从未存在的远程和/或分支。在这种情况下,Git通常会表现得好像这些本地分支没有上游设置一样,只是从1.8.5版本开始,几个命令将上行报告为“gone”或无效,并且可能建议使用--unset-upstream
1更准确地说,它们在从命令行或配置的fetch行执行refspecMap后删除目标引用。因此,对于提取镜像,它们 * 可以 * 删除本地分支。不过,大多数克隆并没有设置为提取镜像。
最近有一些针对复杂Map的bug修复,以确保Git在某些情况下不会修剪Map的分支。对于任何普通的存储库--普通克隆或纯获取镜像--这些修复都没有效果;只有当您拥有复杂的fetch配置时,它们才有意义。

k5hmc34c

k5hmc34c3#

这就是我如何使用Powershell。

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

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

  1. PS> Function func_gitprune { git branch --v | ? { $_ -match "\[gone\]" } | % { -split $_ | select -First 1 } | % { git branch -D $_ } }
  2. PS> Set-Alias -Name gitprune -Value func_gitprune

并在每次需要时通过运行

  1. PS> gitprune
xnifntxz

xnifntxz4#

您需要的命令是

  1. $ git remote prune origin

This question几乎是逐字逐句的你要找的。

c9qzyr3d

c9qzyr3d5#

对我来说,这句话很管用:

  1. git branch -vv | grep "gone" | awk '{print $1}' | xargs git branch -D
vktxenjb

vktxenjb6#

如果用户需要PowerShell版本:

  1. git branch --v | Select-String -Pattern ".*\[gone\].*" | ForEach-Object{($_ -split "\s+")[1]} | ForEach-Object{git branch -D $_}
aor9mmx1

aor9mmx17#

如果您需要Windows命令行版本:

  1. git fetch --all --prune
  2. git branch --all --verbose | for /F "tokens=1" %i in ('findstr /c:"[gone]"') do git branch -D %i

相关问题