git-nanny
Убирает кладбище локальных веток — включая вмёрженные сквошем

Показывает локальные ветки, отсортированные по мёртвости: что вмёржено, что осталось от удалённых на сервере веток, что не трогали месяцами. Отмечаешь в терминальном списке и сносишь пачкой. Перед каждым удалением пишет журнал, из которого ветку можно вернуть. Ставится через Homebrew, работает как `git nanny`.
Зачем, если есть однострочник
Привычное «git branch --merged | xargs git branch -d» закрывает треть задачи. Оно не видит ветки, влитые сквошем, — а именно так вливается большинство пул-реквестов на GitHub и GitLab: коммит ветки не становится предком основной, и для git она выглядит невмёрженной. Не видит и ветки, чей upstream удалили на сервере после мержа. Нянька находит и те, и другие.
Как ловится сквош-мерж
Для ветки берётся точка расхождения с основной, поверх неё временным коммитом кладётся дерево ветки, и git спрашивается, нет ли уже такого патча в основной ветке. Приём известный, но в готовых инструментах почти не встречается. Отдельно утилита читает состояние upstream и дату последнего коммита — из этих трёх признаков и складывается сортировка по мёртвости.
Что сделано ради безопасности
Никогда не удаляются: текущая ветка, основная, занятые другим worktree и попавшие под защиту (шаблон в git config или флагом). Ветки с уникальными коммитами пропускаются, пока не скажешь --force. Без явного указания области неинтерактивный запуск не удаляет ничего, а только показывает список. Если запись в журнал не удалась, ветка не удаляется: необратимое удаление без возможности отката хуже, чем невыполненная уборка. Логика классификации вынесена в отдельный модуль без единого вызова git и покрыта тестами.
Редкий случай, когда утилита делает ровно одну вещь, которой нет в стандартном инструменте: находит ветки, влитые сквошем. Вся конструкция построена вокруг того, чтобы не потерять работу, — журнал пишется до удаления, и без записи в него ветка не удаляется. Три критические ошибки нашлись на ревью до релиза, включая ту, из-за которой главная функция не работала.
<a href="https://vibecoded.ru/products/git-nanny"> <img src="https://vibecoded.ru/badge.svg" alt="запущено на vibecoded.ru" width="200" height="44"> </a>
Похожие запуски
- ClaudeLimitsЛимиты Claude в меню-баре macOS — три числа вместо похода в настройки
- Sorting VisualizerШесть сортировок, анимированных рядом с кодом на Go, который их выполняет
- Волнорезmp3 в вертикальное видео с волной, обложкой и субтитрами — одной командой