如何删除所有通过GitHub“挤压并合并”的git分支?

问题描述:

自从GitHub上介绍Squash and Merge,所有时尚的年轻人,在我的工作场所合并拉请求时都用它。有没有办法清理“壁球和合并”分支?如何删除所有通过GitHub“挤压并合并”的git分支?

How can I delete all git branches which have been merged?下面的命令不会工作“壁球和合并”:

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d 

有没有简单的方法来自动完成这个,至少不完全。 (可以处理一些特殊情况。)相反,最好的办法是将此分支删除委托给拉取请求已被压缩合并的人员。有几个很好的理由:

  1. 他们是唯一可以确保合并正确完成的人。

    例如,假设为了压缩一系列的六个提交,那些合成的壁板合并者必须或者选择在一行或两行中改变几个字符,出于某种原因好或坏。这一行或两行意味着最终提交的总体变化是不同于与六个提交中的六个更改的总和。

    不过是总的结果是否正确?如果你自己没有做任何修改,你会怎么知道?

  2. 他们是唯一知道他们是否打算继续在该分支上开发的人。

    只是因为feature/tall六个提交被压扁成一个提交加入devel并不意味着feature/tall全部完成。他们可能有更多的提交要添加;他们可能需要再次变基feature/talldevel,投下赞成的一六提交 - 壁球六个压扁提交,但保持其他三个提交他们即将补充。

可能还有一些情况。这些可能都是罕见的;他们可能永远不会发生在你的项目中但这里的关键是,分支feature/tall他们分支,不分支,因此他们,无论他们是谁,应该是那些删除它时,它的完成。

请注意,当你拿起feature/tall你有你自己的Git重命名为origin/feature/tall(假设你的远程名为origin)。如果您正在试验它,并且git checkout feature/tall,您的Git会为您制作一份副本。一旦他们删除feature/tall并运行git fetch origin --prune,你的Git删除您origin/feature/tall。所以现在问题更简单了,可以自动化:find branches whose "upstream" is gone, and delete those。 (在这个答案的一个行脚本有一些小瑕疵,看到的评论;票友人会使用git for-each-ref和查找每个分支的上游设置有git rev-parse,但是这可能矫枉过正)