使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
使用@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分支的Powershell版本——merged master | grep -v '^[*]*master$' | xargs git branch -d
git分支——合并主| % {if ($ _ -notmatch \ *。*主){git分支- d " $(美元_.Trim())”}}
当您在主分支上时,这将删除已合并到主分支中的任何本地分支。
Git检查主切换。
Windows的解决方案
适用于Microsoft Windows Powershell:
Git结帐大师;Git远程更新源——prune;git branch -vv | Select-String -Pattern ": gone]" | % {$_.toString(). trim()。Split(" ")[0]} | % {git branch -d $_}
解释
Git签出主切换到主分支
Git远程更新来源——修剪远程分支
Git分支-vv获取所有分支的详细输出(Git引用)
Select-String -Pattern ": gone]"只获取已从远程删除的记录。
% {$_.toString()。Split(" ")[0]}获取分支名称
% {git branch -d $_}删除分支
更短更安全的一行代码:
git branch -d $(git branch --merged | cut -c 3- | grep -v master)
在运行分支之前,请确保签出到尚未合并的分支。因为您不能删除当前签入的分支。
我已经把公认的答案变成了一个健壮的脚本。您可以在我的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 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”没有完全合并。