有一次我认为git fetch origin --prune
删除了服务器上不再存在的本地分支。不知怎的,这不是我目前的经历。
我运行了此命令,并且未删除本地分支。目前已检出 not 。我跑git branch -vv
检查了这个信息,我看到了
feature/MyGreatFeature f30efc7 [origin/feature/MyGreatFeature: gone]
所以它似乎知道它已经消失了。为什么不删除我的本地分支?
正在运行git version 2.7.4 (Apple Git-66)
答案 0 :(得分:32)
各种修剪选项(git remote update --prune
,git remote prune
,git fetch --prune
)仅删除远程跟踪分支。 1
如果远程跟踪分支不再存在,您需要手动删除不再需要的本地分支,或者更改或删除其上游设置。请注意,每个本地分支都可以记录现在甚至从未存在的远程和/或分支。在这种情况下,Git主要表现为那些本地分支没有上游集,除了从版本1.8.5开始,几个命令报告上游“已消失”或无效,并且可能建议使用--unset-upstream
。
1 更确切地说,它们在从命令行执行refspec映射或从配置执行fetch
行后删除目标引用。因此,对于获取镜像,它们可以删除本地分支。但是,大多数克隆都没有设置为获取镜像。
最近有一些针对复杂映射的bug修复,以确保Git在某些情况下不会修剪映射分支。对于任何普通的存储库 - 普通克隆或纯获取镜像 - 这些修复都没有效果;只有当您有复杂的fetch
配置时,它们才有意义。
答案 1 :(得分:9)
答案 2 :(得分:3)
这就是我使用Powershell的方式。
PS> git branch --v | ? { $_ -match "\[gone\]" } | % { -split $_ | select -First 1 } | % { git branch -D $_ }
然后您可以创建一个别名,例如:
PS> Function func_gitprune { git branch --v | ? { $_ -match "\[gone\]" } | % { -split $_ | select -First 1 } | % { git branch -D $_ } }
PS> Set-Alias -Name gitprune -Value func_gitprune
并在每次需要时运行它来执行
PS> gitprune
答案 3 :(得分:1)
以下命令链可用于删除本地分支:
git branch --v | grep "\[gone\]" | awk '{print $1}' | xargs git branch -D
这应该可以在MacOS上与* nix环境一起使用。
答案 4 :(得分:0)
对我来说,这行有效:
git branch -vv | grep "gone" | awk '{print $1}' | xargs git branch -D