Git:找到符合条件的所有远程分支*删除(* last commit是要合并到master)

时间:2016-04-22 15:53:26

标签: git merge git-branch branching-and-merging

我知道这个问题已经以类似的方式提出过了。但是,我正在寻找更严格的资格标准。我只对分支机构感兴趣

  1. 已合并为主人
  2. 合并后没有进一步的提交 掌握
  3. 这是为了避免删除具有一些(可能有价值的)工作但尚未合并到主人的分支(通过可能的遗漏,放弃的拉请求等)

2 个答案:

答案 0 :(得分:1)

以下是建议的解决方案:

假设:最老的祖先被假定为出生/主人。这是标准做法,但没有任何损害。

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

一步一步

  1. 查找所有具有初始主提交的远程分支 后代。
  2. 对于每个分支,检查最新提交是否合并回最早的祖先。
  3. 输出报告如下所示。分支旁边的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
    

    希望这可以帮助任何寻找类似东西的人。欢迎任何建议和改进

答案 1 :(得分:1)

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

git branch -r --merged master

(当然--no-merged可能仍然需要对其进行处理,根据对other answer的评论。