使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
您可以使用该命令:
git branch --merged master | grep -v "\* master" | xargs -n 1 git branch -d
Git清洁:删除已经合并的分支,包括分解命令
其他回答
我已经把公认的答案变成了一个健壮的脚本。您可以在我的git-extensions存储库中找到它。
$ git-rprune --help
Remove old local branches that do not exist in REMOTE any more.
With --test, only print which local branches would be deleted.
Note: To do this automatically on each fetch / pull:
git config --global fetch.prune true
Usage: git-rprune REMOTE [-t|--test|-f|--force] [-?|-h|--help]
我很确定git remote prune origin是你想要的。
你可以运行它作为git远程剪枝起源-演练,看看它会做什么不做任何改变。
在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
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
基于以上的答案,我想出了这个简单的解决方案:
git remote prune origin; git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d