使用git远程修剪原点,我可以删除不在远程上的本地分支。

但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。

我该怎么做呢?


当前回答

如果使用Windows和Powershell,您可以使用以下命令删除已合并到当前签出的分支中的所有本地分支:

git branch --merged | ? {$_[0] -ne '*'} | % {$_.trim()} | % {git branch -d $_}

解释

列出当前分支和已合并到其中的分支 过滤掉当前分支 清除git输出中每个剩余分支名称的前导或尾随空格 删除合并的本地分支

值得先运行git分支——自行合并,以确保它只会删除你希望它删除的东西。

(从http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/移植/自动化。)

其他回答

尝试在git bash中,获取并修剪对已删除分支的引用,然后修剪跟踪已删除分支的本地分支:

git fetch -p && git branch -d `git branch -vv | grep ': gone]' | awk '{print $1}' | xargs`

记住先签出一个不会被删除的分支,这样就不会阻止该分支的删除。

Powershell:

git branch -D (git branch --merged |% { $_.trim() } )

虽然迟到了,但是你可以使用——no-contains选项来避免在使用branch -merged时删除你的主分支

git branch --no-contains master --merged master | xargs git branch -d

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 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