之前一直以一种“笨办法”来删 git 分支,比如要删本地分支,直接
git branch -d <branch>
如果是 remote 分支,就
git push <remote> :<branch>
但随着项目越来越多,每个项目都可能需要随时在几个不同的 feature 或 bugfix 上切换,而且当一个 branch 用完之后很可能忘记立即删掉,这样导致的结果就是分支积攒的越来越多,删分支的时候就会耗费很多时间和精力(需要不停地重复上面两个命令)。
后来就在豆瓣上抱怨了一下,然后@灭灭就在回应里告诉了我这个脚本,可以很方便的删 remote 分支(同时还有一个脚本用来删本地分支)。
这个脚本用 subprocess 模块创建子进程,然后在子进程中调用 git 命令来拿到当前仓库所有的 remote 分支,并且将分支列表写入一个临时文件。你可以编辑这个临时文件,删掉你要删除的分支并保存。然后它会比较编辑之前和编辑之后的分支列表,得到的差集就是你要删除的分支,再调用 git 命令删除之。
于是我就在这个脚本的基础上稍微改了一下,让它既能删 remote 分支,同时也不会放过本地分支。下面是我的版本,放在 Gist 上了: