使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
似乎没有一个安全的一行代码,有太多的边缘情况(比如分支的名称中有“master”,等等)。最安全的是以下步骤:
Git分支-vv | grep 'gone]' > stale_branches.txt 查看文件并删除想要保留的分支(例如主分支!);您不需要编辑任何一行的内容 Awk '{print $1}' stale_branches.txt | xargs git branch -d
其他回答
这适用于我使用git 2.21.0 -它删除本地跟踪分支,这些分支合并到HEAD中,我之前在push上—set-upstream(我使用push.default=upstream,因为它最适合多个远程),并且上游分支已经被fetch—prune(或隐式地如果fetch。修剪=true在git配置):
git branch -vv --merged | grep ': gone]' | awk '{print $1}' | xargs git branch -d
-merged和-d的使用使得这是一个非常“安全”的删除。更激进的版本可以放弃-merged并使用-D
你可以通过一些简单的操作来做到这一点:
输出你所有的分支到一个临时文件:
git branch > branches.tmp
打开文件并删除分支以排除它们从本地删除(分支如develop/master/main/…) 通过cat命令将分支名称传递给xargs并删除分支:
cat branches.tmp | xargs git branch -D
Windows的解决方案
适用于Microsoft Windows Powershell:
Git结帐大师;Git远程更新源——prune;git branch -vv | Select-String -Pattern ": gone]" | % {$_.toString(). trim()。Split(" ")[0]} | % {git branch -d $_}
解释
Git签出主切换到主分支
Git远程更新来源——修剪远程分支
Git分支-vv获取所有分支的详细输出(Git引用)
Select-String -Pattern ": gone]"只获取已从远程删除的记录。
% {$_.toString()。Split(" ")[0]}获取分支名称
% {git branch -d $_}删除分支
它将列出远程跟踪分支从remote中删除的本地分支
$ git remote prune origin --dry-run
如果你想从未被跟踪的本地去引用这些本地分支
$ git remote prune origin
您可以使用该命令:
git branch --merged master | grep -v "\* master" | xargs -n 1 git branch -d
Git清洁:删除已经合并的分支,包括分解命令