使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
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 $_}删除分支
其他回答
正如@tzacks所说…有一个NPM包非常方便。只做:
npx git-removed-branches --prune
(我本想评论一下,但名声不够好)
删除远程分支:
$git remote prune origin
删除已合并的本地分支。
$git branch -D $(git branch --merged)
在OS X上,支持cut -w
git branch -d $(git branch -vv | grep ': gone]' | cut -w -f 2 )
解释
删除以下分支
git branch -d ...
显示移除的分支
$ git branch -vv | grep ': gone]'
chore/TECH-456 a4bdac8ac8 [origin/TECH-456: gone] chore: syntax error
feature/TECH-678 0342f8e277 [origin/feature/TECH-678: gone] Added IsGross in new Income Details
保留分支名称
$ git branch -vv | grep ': gone]' | cut -w -f 2
chore/TECH-456
feature/TECH-678
检查目标
$(git分支| grep -Eiv“master|develop|branchYouWantToLive”);执行echo $target;完成
使用for &子命令运行
$(git分支| grep -Eiv“master|develop|branchYouWantToLive”);做git分支-D $target;完成
你可以扩展其他关于分支的东西。
Schleis的变种不适合我(Ubuntu 12.04),所以让我提出我的变种(清晰而闪亮:):
变体1(我更喜欢这个选项):
git for-each-ref --format='%(refname:short) %(upstream)' refs/heads/ | awk '$2 !~/^refs\/remotes/' | xargs git branch -D
版本2:
管制:
comm -23 <( git branch | grep -v "/" | grep -v "*" | sort ) <( git br -r | awk -F '/' '{print $2}' | sort ) | awk '{print "git branch -D " $1}'
b.移除分支:
comm -23 <( git branch | grep -v "/" | grep -v "*" | sort ) <( git br -r | awk -F '/' '{print $2}' | sort ) | xargs git branch -D