git fetch origin --prune 不删除本地分支?
git fetch origin --prune doesn't delete local branches?
有一次我认为 git fetch origin --prune
删除了服务器上不再存在的本地文件运行。不知何故,这不是我目前的体验。
我运行这个命令,本地的b运行ch没有被删除。目前未签出。我 运行 git branch -vv
查看此信息,我看到
feature/MyGreatFeature f30efc7 [origin/feature/MyGreatFeature: gone]
所以它好像知道它没了。为什么它不删除我的本地 b运行ch?
运行 git version 2.7.4 (Apple Git-66)
你想要的命令是
$ git remote prune origin
This question 几乎是您要查找的字词。
各种修剪选项(git remote update --prune
、git remote prune
、git fetch --prune
)仅删除远程跟踪分支。 1
您需要手动删除不再需要的本地分支,或者如果远程跟踪分支不再存在,则更改或删除它们的上游设置。请注意,每个本地分支都可以记录一个远程 and/or 分支,这些分支现在不存在,甚至从未存在过。在这种情况下 Git 主要表现为那些本地分支没有设置上游,除了自版本 1.8.5 以来,一些命令将上游报告为 "gone" 或其他无效,并且可能建议使用 --unset-upstream
.
1更准确地说,他们在从命令行或配置中的 fetch
行执行 refspec 映射后删除目标引用。因此,对于获取镜像,它们可以删除本地分支。不过,大多数克隆未设置为获取镜像。
最近修复了一些复杂映射的错误,以确保 Git 在某些情况下不应该修剪映射的分支。对于任何普通存储库——普通克隆或纯获取镜像——这些修复都没有效果;只有当你有复杂的 fetch
配置时它们才重要。
以下命令链可用于删除本地分支:
git branch --v | grep "\[gone\]" | awk '{print }' | xargs git branch -D
git branch --v
详细列出本地分支
grep "\[gone\]"
找到所有远程分支消失的分支
awk '{print }'
只输出匹配的本地分支的名称
xargs git branch -D
删除所有匹配的本地分支
这应该适用于 MacOS 以及 *nix 环境。
对我来说,这条线有效:
git branch -vv | grep "gone" | awk '{print }' | xargs git branch -D
这就是我使用 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
如果人们需要 PowerShell 版本:
git branch --v | Select-String -Pattern ".*\[gone\].*" | ForEach-Object{($_ -split "\s+")[1]} | ForEach-Object{git branch -D $_}
有一次我认为 git fetch origin --prune
删除了服务器上不再存在的本地文件运行。不知何故,这不是我目前的体验。
我运行这个命令,本地的b运行ch没有被删除。目前未签出。我 运行 git branch -vv
查看此信息,我看到
feature/MyGreatFeature f30efc7 [origin/feature/MyGreatFeature: gone]
所以它好像知道它没了。为什么它不删除我的本地 b运行ch?
运行 git version 2.7.4 (Apple Git-66)
你想要的命令是
$ git remote prune origin
This question 几乎是您要查找的字词。
各种修剪选项(git remote update --prune
、git remote prune
、git fetch --prune
)仅删除远程跟踪分支。 1
您需要手动删除不再需要的本地分支,或者如果远程跟踪分支不再存在,则更改或删除它们的上游设置。请注意,每个本地分支都可以记录一个远程 and/or 分支,这些分支现在不存在,甚至从未存在过。在这种情况下 Git 主要表现为那些本地分支没有设置上游,除了自版本 1.8.5 以来,一些命令将上游报告为 "gone" 或其他无效,并且可能建议使用 --unset-upstream
.
1更准确地说,他们在从命令行或配置中的 fetch
行执行 refspec 映射后删除目标引用。因此,对于获取镜像,它们可以删除本地分支。不过,大多数克隆未设置为获取镜像。
最近修复了一些复杂映射的错误,以确保 Git 在某些情况下不应该修剪映射的分支。对于任何普通存储库——普通克隆或纯获取镜像——这些修复都没有效果;只有当你有复杂的 fetch
配置时它们才重要。
以下命令链可用于删除本地分支:
git branch --v | grep "\[gone\]" | awk '{print }' | xargs git branch -D
git branch --v
详细列出本地分支grep "\[gone\]"
找到所有远程分支消失的分支awk '{print }'
只输出匹配的本地分支的名称xargs git branch -D
删除所有匹配的本地分支
这应该适用于 MacOS 以及 *nix 环境。
对我来说,这条线有效:
git branch -vv | grep "gone" | awk '{print }' | xargs git branch -D
这就是我使用 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
如果人们需要 PowerShell 版本:
git branch --v | Select-String -Pattern ".*\[gone\].*" | ForEach-Object{($_ -split "\s+")[1]} | ForEach-Object{git branch -D $_}