是否有一种简单的方法可以删除所有远程对等分支不再存在的跟踪分支?

例子:

分支机构(本地和远程)

主人原始/主起源/bug-fix-a起源/bug-fix-b起源/bug-fix-c

在本地,我只有一个主分支。现在我需要处理bug-fix-a,所以我检查它,处理它,并将更改推到远程。接下来,我对bug-fix-b做同样的操作。

分支机构(本地和远程)

主人bug-fix-abug-fix-b型原始/主起源/bug-fix-a起源/bug-fix-b起源/bug-fix-c

现在我有本地分支机构master,bug-fix-a,bug--fix-b。主分支维护者将把我的更改合并到主分支中,并删除他已经合并的所有分支。

因此,当前状态为:

分支机构(本地和远程)

主人bug-fix-abug-fix-b型原始/主起源/bug-fix-c

现在我想调用一些命令来删除分支(在本例中为bug-fix-a、bug-fix-b),这些分支在远程存储库中不再表示。

它类似于现有命令git remote prune origin,但更类似于git local prune origin。


当前回答

有时,你只是想有一个干净的记录,但需要确保能够回到以前在当地分支机构的工作。

如果是这样,最简单的方法可能就是归档当前的本地克隆并创建一个新的克隆。

因此,对于仅具有本地默认分支的存储库X

move X X-2021-11-10
git clone http://...../X

如果您需要完全相同的来源,请询问git

git -C X remote -v

其他回答

git fetch -p

这将修剪远程上不再存在的所有分支。

真正的挑战是当维护者压缩提交时。然后,使用git内置功能(如--merged)的解决方案没有帮助。

gitdelete合并分支工具允许方便地删除分支。我特别喜欢互动模式。

安装(需要python3):

pip install git-delete-merged-branches

然后执行

git-delete-merged-branches --effort=3

--努力=3对于能够删除挤压的分支很重要。

选择

@teppeis/git delete squashed:安装node.js后,执行npx@teppeis/git delete squushed。支持主分支。git delete squashed:未维护:主分支的未命中功能@teppeis/git delete squashed基于此。

我最近发布了一个解决方案,我已经使用了很长时间,它依赖于分支命名来包含问题编号,您可以看到这个答案,它链接到我的git_clean_branches版本,这是一个交互式脚本,用于删除已关闭问题的分支(通常通过壁球合并)。

我不确定要用多久,但我现在确实使用git-up,这可以解决这个问题。

我做了git,它开始跟踪新的分支并删除旧的分支。

为了清楚起见,这不是现成的git命令-https://github.com/aanand/git-up

顺便说一句,它还藏着脏树,只需把它捡起来就可以重新放回原处。

希望对某人有用

我使用这种方法是为了更好地控制。

git branch-D$(git branch|grep-v“master”|grep/v“develop”)

这是删除所有未命名的分支:master或develop。