使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
这适用于我使用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
其他回答
使用@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就可以清理合并后不再需要的本地和远程分支。
有一个整洁的npm包可以为你做这件事(它应该可以跨平台工作)。
使用npm Install -g git-removed-branches安装它
然后git remove -branches会显示所有过时的本地分支,然后git remove -branches -prune会删除它们。
更多信息请点击这里。
不知道如何一次性完成,但是git git branch -d <branchname>只会在完全合并的情况下删除本地分支。注意小写的d。
git branch -D <branchname>(注意大写D)将删除本地分支,无论其合并状态如何。
这将删除已修剪远程跟踪分支的本地分支。(确保你在主分支上!)
git checkout master
git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d
细节:
Git branch -vv对于远程已修剪的本地分支显示“gone”。 Mybranch abc1234 [origin/ Mybranch: gone]提交注释 -d将检查它是否已合并(-d将删除它) 错误:分支“mybranch”没有完全合并。
如果使用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/移植/自动化。)