如何修剪远程不再存在的本地跟踪分支
Posted
技术标签:
【中文标题】如何修剪远程不再存在的本地跟踪分支【英文标题】:How to prune local tracking branches that do not exist on remote anymore 【发布时间】:2012-10-15 09:38:54 【问题描述】:使用git remote prune origin
,我可以删除不再位于远程的本地分支。
但我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做?
【问题讨论】:
Remove local branches no longer on remote的可能重复 单线,跨平台,看起来不像猫睡在你的键盘上:npx git-removed-branches
(试运行)或npx git-removed-branches --prune
(真实)。您需要已经安装了 node.js。详情请见answersbelow。
我通常认为这些事情应该故意而不是自动完成,否则你会打开自己删除不想删除的内容。所以我会坚持使用 git branch -d localBranchName 和 git push origin --delete remoteBranchName
【参考方案1】:
这适用于我使用 git 2.21.0 - 它删除了合并到 HEAD
的本地跟踪分支,我之前在推送时使用了 --set-upstream
(我使用 push.default=upstream
,因为它最适用于多个遥控器)并且上游分支已被fetch --prune
删除(或在 git config 中隐式删除 fetch.prune=true
):
git branch -vv --merged | grep ': gone]' | awk 'print $1' | xargs git branch -d
使用--merged
和-d
使其成为非常“安全”的删除。更激进的版本可以放弃--merged
并使用-D
【讨论】:
一个非常简单的相关且易于理解的解决方案,谢谢! 请注意,您必须签出跟踪现有远程分支的分支,否则在管道到xargs
之前的命令将返回 *
而不是分支名称。我的建议是使用git checkout master; git branch -vv --merged | grep ': gone]' | awk 'print $1' | xargs git branch -d
【参考方案2】:
当遥控器本身不再存在时,我没有在这里找到有用的答案。 我不断看到不再存在的遥控器分支,但没有找到删除它们的 git 命令。
我的解决方案是去.git\refs\remotes
目录,直接删除不再相关的文件。文件结构非常容易理解。它与您在git branch -r
中看到的结构相同。
【讨论】:
【参考方案3】:检查目标
for target in $(git branch | grep -Eiv "master|develop|branchYouWantToLive"); do echo $target; done
使用 for & 子命令运行
for target in $(git branch | grep -Eiv "master|develop|branchYouWantToLive"); do git branch -D $target; done
你可以扩展其他关于分支的东西。
【讨论】:
以上是关于如何修剪远程不再存在的本地跟踪分支的主要内容,如果未能解决你的问题,请参考以下文章