随着项目迭代越来越久,本地会创建一系列分支,太多了有时候找起来也不方便,就想将一些已经删除的远程分支对应的本地分支清理掉 (我们会对gitlab上已经merged的分支定期清理,毕竟图形化界面操作起来也方便)
清除已删除远程分支
git fetch -p
其作用就是如果你通过git fetch 获取了远程分支,后面远程的分支又被删除了,就可以通过该命令来删除那么已经被清除的远程分支;如果你在获取远程分支的时候同时创建了一个本地分支,那么该命令只能帮你解除本地分支和远程分支的关联性,并不会将本地分支也删除掉
git remote prune origin
上述命令的效果同git fetch -p
那么想要真正删除这些烦人的无用本地分支要怎么做呢?
逐个删除(最笨)
通过git branch 命令可以查看所有的本地分支,然后通过git branch -d命令一个个删除
git branch
git branch -d <branchName>
git branch -d 删除分支,会在删除前检查merge状态,避免误删没有合并的分支。
git branch -D 是git branch --delete --force的简写,它会强制删除该分支。
如果想要删除远程分支以及追踪分支需使用: git push --origin -delete branch
批量删除
/d/IdeaProjects/my-service (master)
$ git branch --merged |grep -v "\*" | grep -v "release" > d:/branch.txt
/d/IdeaProjects/my-service (master)
$ xargs git branch -d < d:/branch.txt
Deleted branch feature_dev2 (was 0e24efa).
通过第一个命令将所有本地的且已合并到当前分支的分支写入到branch.txt(排除release分支和当前分支) – 建议在release或者master分支执行
然后根据获取到的branch执行git branch -d命令删除
上述操作命令简单明了,还可以根据获得到的branch.txt自行删除自己想要保留的分支
可以简化成如下命令,不过要注意不要删错了分支:
git branch --merged |grep -v "\*" | grep -v "release" |xargs git branch -D
xargs 命令配合 | 使用,将前一条指令的输出流向会作为后一条指令的参数输入。
还可以写成shell脚本
#!/bin/bash
branches=`git branch --merged |grep -v "\*" | grep -v "release"` ;# 获取分支名
echo $branches;
for branch in $branches
do
`git branch -d $branch`;
echo delete branch $branch;
done;
c函数
import os
def delete_not_merged_branch():
result = os.popen("git branch --merged")
git_branches = result.read()
for git_branch in git_branches.splitlines():
if git_branch != '* release':
print(git_branch)
os.system('git branch -d ' + git_branch)
参考资料:
what-does-git-fetch-p-means
remove-tracking-branches-no-longer-on-remote