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

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

我该怎么做呢?


当前回答

删除所有没有更新到master的分支

git co master && git branch | sed s/\*/\ / | xargs git branch -d 2> /dev/null

其他回答

基于上面的答案,我使用了更短的一行:

git remote prune origin | awk 'BEGIN{FS="origin/"};/pruned/{print $2}' | xargs -r git branch -d

此外,如果你已经修剪过了,并且有局部的树枝悬挂着,那么这将清理它们:

git branch -vv | awk '/^ .*gone/{print $1}' | xargs -r git branch -d

使用@wisbucky答案的变体,我将以下内容作为~/的别名添加到~/。gitconfig文件:

pruneitgood = "!f() { \
    git remote prune origin; \
    git branch -vv | perl -nae 'system(qw(git branch -d), $F[0]) if $F[3] eq q{gone]}'; \
}; f"

这样,一个简单的git pruneitgood就可以清理合并后不再需要的本地和远程分支。

删除远程分支:

$git remote prune origin

删除已合并的本地分支。

$git branch -D $(git branch --merged)

这适用于我使用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

有一个整洁的npm包可以为你做这件事(它应该可以跨平台工作)。

使用npm Install -g git-removed-branches安装它

然后git remove -branches会显示所有过时的本地分支,然后git remove -branches -prune会删除它们。

更多信息请点击这里。