本地分支清理
1.查看我们本地的分支只需要执行一下:
git branch
2.我们还可以找出所有已经合入到 master的本地分支:
git checkout master
git branch --merged
3.针对这些已经合入的分支,如果确定已经不会使用的话,就可以将其删除了:
git branch -d feature/XXX
4.如果十分确定所有合入的分支都不再需要了,那么可以考虑一次性解决( (^*)是匹配当前分支,其余 (master|dev)部分可以根据自己项目的实际情况进行修改):
git branch --merged | grep -v "(^*|master|dev)" | xargs git branch -d
5.这么一来,就可以安全地删除所有已经不再需要的分支了。除此之外,也可以浏览一下没有合入 master 的本地分支,检查看看哪些分支已经废弃,不需要继续开发了:
git branch --no-merged
6.针对这些分支,只用 git branch-d命令会收到系统的善意提醒。如果十分确定可以删除,那么可以使用强制删除命令(一定要确认好啊):
git branch -D feature/XXX
经过这么一番清理,相信你的本地分支现在已经十分轻佻了, git branch返回的结果看起来也十分清爽。接下来就来清理一下本地的远程分支。
远程分支清理
1.远程分支的查看只需要在 git branch命令加一个 -r( --remotes) 参数即可:
git branch -r
清楚分支命令 git push origin -d 分支名
远程分支的清理,一方面是清理远程分支中,已经合入 master的分支,另一方面是清理远程仓库已经删除了的分支,而本地还在跟踪的。
2.第二种情况的清理非常简单,只需要执行:
git remote prune origin
事实上,我们可以在每次 git fetch时,添加一个参数 -p( --prune),这样每次 fetch 远程仓库时都可以顺手删掉本地多余的分支(建议将 git fetch-p直接 alias 到 git fetch命令~)。
再来看第一种情况,虽然同样可以通过 git branch-r--merged来查看已经合入 master的分支,但由于远程分支不只是自己开发的,所以还需要别人的确认才能进行删除。
好在我们可以在命令行的帮助下快速筛选出每个人的分支,然后就可以把这份统计摘要发给 TA 来确认。
for branch in `git branch -r --merged | grep -v HEAD`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1`; done | sort -r | grep AUTHOR_NAME
这行命令首先是过滤出所有已合入 master的远程分支( git branch-r--merged|grep-v HEAD),然后遍历每个分支,展示( git show)其最后一次提交的绝对时间( %ci)、相对时间( %cr)和作者( %an)信息,按时间倒序排列( sort-r),最后过滤出作者是 AUTHOR_NAME的分支。
如果想查看更多的信息,可以在 git show的 format加上 %s(提交信息)和 %h(commit SHA1 前缀)。
这样一份报告,给到相关开发同学,确认之后,就可以执行批量清理了。注意,远程分支的删除应该到远程仓库去删除(否则下次 fetch 还会再拉下来),因此需要我们把这个删除动作 push 到远程仓库。
最后,如果你 push 了删除动作到远程仓库,不要忘了提醒下其他同学 git fetch-p来同步删除自己本地的远程分支哈!