Git :查找所有符合*删除条件的远程分支(*最后一次提交是对 master 的合并)

Git : Find all remote branches eligible* for deletion (* last commit is a merge to master )

我知道已经有人以类似的方式提出了这个问题。但是,我正在寻找更严格的资格标准即。我只对

的分支感兴趣
  1. 已合并到 master
  2. 合并后没有进一步提交 掌握

这是为了避免删除有一些进一步(可能有价值)工作但尚未合并到 master 的分支(通过可能的遗漏、放弃的拉取请求等)

建议的解决方案如下:

假设:假设最老的祖先是 origin/master。这是标准做法,但说出来也无妨。

git branch -r --list --contains `git rev-list  --max-parents=0 origin/master`| grep -v origin\/master | sed 's/^..\(.*\)//' | xargs -I {}  sh -c "echo -n {}' : '; git log --graph -n 1 {} | grep -c '^|[\]\ \ Merge'"

循序渐进

  1. 查找所有将初始主提交作为 后代。
  2. 对于每个分支,检查最新的提交是否合并回最旧的祖先。

输出报告如下所示。分支旁边的 1 表示它有资格删除

origin/0.2016.02-release : 1
origin/0.2016.03-release : 1
origin/Fix-for-NPE-schedule-master : 0
origin/Fix-possible-infinite-loop-master : 0
origin/Fixing-unit-tests-master : 0
origin/NoBodyRequiredForActivity-master : 0
origin/Removing-not-needed-dependency-master : 0
origin/updateDevServiceConfig-master : 0
origin/updateServerPort-master : 0
origin/updatedPom : 1

希望这对寻找类似内容的任何人有所帮助。欢迎提出任何建议和改进

更简单,对于这种特殊情况(检查哪些远程跟踪分支完全合并到 master):

git branch -r --merged master

(当然 --no-merged 对于那些可能仍然需要改进的,根据 上的评论)。