批量删除已重组和合并的本地分支

时间:2014-07-17 09:57:52

标签: git github

在我们的团队中,我们为主分支机构和开发分支保留快进+ 合并策略,以防止合并提交地狱

merge commit hell

一旦它们被合并(或重新组合然后合并),我就不会删除我的主题分支,所以我最终得到了大量的这些分支。我可以删除一些:

git branch --merged

这只会告诉我那些在合并之前没有被重新定位的人。还有一些,我能够清理它们。

我正在寻找一些策略,脚本或提示如何处理重生的。必须有一个脚本可以在循环中找到主节点中主题分支的所有提交。请分享; - )

由于

3 个答案:

答案 0 :(得分:3)

你有one script通过以下方式执行此操作:

  • 获取每个分支的最后一次提交
  • 检查提交是否为主要历史记录的一部分

这将删除已合并为主人的重新分支。

last_commit_msg="$(git log --oneline --format=%f -1 $branch)"
if [[ "$(git log --oneline --format=%f | grep $last_commit_msg | wc -l)" -eq 1 ]]; then

答案 1 :(得分:3)

我写了一个可以帮助解决这个问题的交互式脚本。

https://github.com/lzap/git-xcleaner

发送补丁并从其手册页(下图)中阅读警告!

git xcleaner main menu

  

git-xcleaner(1) - 交互式git分支删除概要

     

git xcleaner

     

说明

     

此工具有助于使用TUI删除未使用的主题分支(文本   用户界面)。它还提供预选分支的机制   可以安全地删除。

     

警告

     

此工具在确认后删除git分支。没有办法   收集git垃圾时回来仔细检查你的目标   除去!

     

返回值

     

成功归零,使用git进行操作时出现错误。

     

BUGS

     

https://github.com/lzap/git-xcleaner/issues

的档案错误

答案 2 :(得分:2)

我想要一种非交互式的东西,它可以概括为每个分支超过一个提交。请注意,尚未对此进行广泛测试,并且在运行此命令时,可能会比您对克隆的状态做更多的假设:

为所有可以彻底重新建立基础的本地分支建立基础:

REBASE_TARGET=upstream/master
for branch in $(git for-each-ref --format="%(refname:lstrip=2)" refs/heads/); do
    git rebase "$REBASE_TARGET" "$branch" || git rebase --abort
done

删除所有已合并的本地分支:

git branch --format="%(refname:lstrip=2)" --merged | xargs git branch -d