如何修剪远程不再存在的本地跟踪分支

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

你可以扩展其他关于分支的东西。

【讨论】:

以上是关于如何修剪远程不再存在的本地跟踪分支的主要内容,如果未能解决你的问题,请参考以下文章

Git修剪远程和本地分支

你如何停止在 Git 中跟踪远程分支?

删除远程仓库不存在本地存在的分支的命令

如何将新的本地分支推送到远程 Git 存储库并对其进行跟踪?

跟踪远程分支

git基于远程分支创建本地分支