有一次,我认为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)
这应该适用于 MacOS 以及 *nix 环境。
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)
小智 9
你想要的命令是
$ git remote prune origin
Run Code Online (Sandbox Code Playgroud)
这个问题几乎是一字不差地找到了你想要的东西.