本文转载自个人博客git
Git 能够说是目前最受欢迎的版本管理工具了,不少团队也都在用它来管理本身的项目代码。在一个多人协做的项目中,每每采用的是一个分支一个特性进行开发,随着天天的代码提交、合并,仓库中会有愈来愈多的冗余分支。这么多死分支不只会掩盖真正在使用的分支,并且也为管理带来不便。若是你像我同样,也常常被淹没在 git branch
或 git branch -r
返回的分支大海中,那么,就是时候考虑给你的 git 仓库作一次大扫除了!github
大扫除以前,首先给本身作个深呼吸,回忆一下远程仓库和远程分支的概念。安全
咱们本地的仓库既保留有本地的分支,也保留有跟踪远程仓库的 remote 分支(相似 remotes/origin/**
这种的)。后者至关因而远程仓库分支在本地仓库的代理,每次 git fetch
或 git pull
时,都会将远程仓库的分支同步到本地对应的 remote 分支上。工具
好比远程仓库新增了一个 feature/add_a
分支,那么咱们在本地 git fetch
后,会获得一个 remotes/origin/feature/add_a
分支,这个名字表示 origin
这个远程仓库下的 feature/add_a
,origin
是本地给远程仓库默认起的名字,你固然也能够改为别的名字。fetch
理清楚了本地分支和远程分支,本地仓库和远程仓库,接下来咱们就动起手来作清理吧!命令行
查看咱们本地的分支只须要执行一下代理
git branch
咱们还能够找出全部已经合入到 master
的本地分支code
git checkout master git branch --merged
针对这些已经合入的分支,若是肯定已经不会使用的话,就能够将其删除了orm
git branch -d feature/XXX
若是十分肯定全部合入的分支都再也不须要了,那么能够考虑一次性解决((^\*)
是匹配当前分支,其他 (master|dev)
部分能够根据本身项目的实际状况进行修改)ci
git branch --merged | grep -v "(^\*|master|dev)" | xargs git branch -d
这么一来,就能够安全地删除全部已经再也不须要的分支了。除此以外,也能够浏览一下没有合入 master 的本地分支,检查看看哪些分支已经废弃,不须要继续开发了
git branch --no-merged
针对这些分支,只用 git branch -d
命令会收到系统的善意提醒。若是十分肯定能够删除,那么可使用强制删除命令(必定要确认好啊)
git branch -D feature/XXX
通过这么一番清理,相信你的本地分支如今已经十分轻佻了,git branch
返回的结果看起来也十分清爽。接下来就来清理一下本地的远程分支。
远程分支的查看只须要在 git branch
命令加一个 -r
(--remotes
) 参数便可
git branch -r
远程分支的清理,一方面是清理远程分支中,已经合入 master
的分支,另外一方面是清理远程仓库已经删除了的分支,而本地还在跟踪的。
第二种状况的清理很是简单,只须要执行
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
来同步删除本身本地的远程分支哈!
git push origin --delete feature/YYY
若是本身常常换机器开发、push 代码,并且不一样机器的 git config 不彻底同样的话(好比我不一样机器上 user.name 有的是英文名有的是中文名),提交的做者签名也不同,这时还须要根据不一样的 user.name 进行查找……
不过好在咱们有命令行,用如下命令就能获得仓库里全部提交过的做者了~
git shortlog -s