随着git remote prune origin我可以删除远程没有更多的本地分支。
但是我也想删除那些从这些远程分支创建的地方分支(检查他们是否没有被分开会很好)。
我怎样才能做到这一点?
如果要删除已经合并到主服务器中的所有本地分支机构,则可以使用以下命令:
git branch --merged master | grep -v '^[ *]*master$' | xargs git branch -d
修剪后,你可以得到远程分支的列表git branch -r。带有远程追踪分支的分支机构列表可以被检索git branch -vv。因此,使用这两个列表可以找到不在远程列表中的远程跟踪分支。
这行应该做的伎俩(要求,bash或zsh将不会使用标准的Bourne shell):
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),然后获得该输出的第一列将是分支名称。最后将所有分支名称传入删除分支命令。
由于它正在使用该-d选项,因此在运行此命令时,它不会删除尚未合并到您所在分支中的分支。
还记得你需要运行的git fetch --prune 第一,否则git branch -r仍然会看到远程分支。