使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
虽然迟到了,但是你可以使用——no-contains选项来避免在使用branch -merged时删除你的主分支
git branch --no-contains master --merged master | 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
使用@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 branch -d只会发出警告,而不是删除未合并的本地分支。
git branch -a | grep origin | tr -s ' ' | cut -d '/' -f3 | egrep -v -f /dev/fd/0 <(git branch -a | grep -v origin) | grep branch_prefix_that_I_care_about | xargs git branch -d
# translation
# git branch -a | grep origin | tr -s ' ' | cut -d '/' -f3
## this finds all remote branch names minus the "remote/origin/" part
#
# <(git branch -a | grep -v origin)
## this finds all local branch names and redirects it into the previous command
#
# egrep -v -f /dev/fd/0 STUFF
## this is doing some weird magic that I'm grokking as "take the set difference from whatever was piped in"
#
#
# overall translation: (STUFF TO CONSIDER) | egrep magic <(STUFF TO REMOVE FROM CONSIDERATION) | do cool things with resulting stuff
修剪完成后,你可以使用git branch -r获取远程分支的列表。带有远程跟踪分支的分支列表可以使用git branch -vv检索。因此,使用这两个列表,您可以找到不在远程列表中的远程跟踪分支。
这一行应该做的把戏(需要bash或zsh,不会与标准的Bourne shell工作):
git fetch -p ; git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
该字符串获取远程分支的列表,并通过标准输入将其传递给egrep。并过滤具有远程跟踪分支的分支(使用git branch -vv并过滤那些具有origin的分支),然后获得输出的第一列,这将是分支名称。最后将所有分支名称传递给delete branch命令。
由于它使用的是-d选项,所以在运行此命令时,它不会删除尚未合并到您所在分支中的分支。
git分支的Powershell版本——merged master | grep -v '^[*]*master$' | xargs git branch -d
git分支——合并主| % {if ($ _ -notmatch \ *。*主){git分支- d " $(美元_.Trim())”}}
当您在主分支上时,这将删除已合并到主分支中的任何本地分支。
Git检查主切换。