vibecoded
#018 ·

git-nanny

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

собран за 1 вечер·Claude CodeGoBubble Tea
Открыть продукт ↗
Терминальный список веток: отмеченная fix-auth помечена как merged, три ветки ниже — серые с пометкой «has unique commits»

Показывает локальные ветки, отсортированные по мёртвости: что вмёржено, что осталось от удалённых на сервере веток, что не трогали месяцами. Отмечаешь в терминальном списке и сносишь пачкой. Перед каждым удалением пишет журнал, из которого ветку можно вернуть. Ставится через Homebrew, работает как `git nanny`.

Зачем, если есть однострочник

Привычное «git branch --merged | xargs git branch -d» закрывает треть задачи. Оно не видит ветки, влитые сквошем, — а именно так вливается большинство пул-реквестов на GitHub и GitLab: коммит ветки не становится предком основной, и для git она выглядит невмёрженной. Не видит и ветки, чей upstream удалили на сервере после мержа. Нянька находит и те, и другие.

Как ловится сквош-мерж

Для ветки берётся точка расхождения с основной, поверх неё временным коммитом кладётся дерево ветки, и git спрашивается, нет ли уже такого патча в основной ветке. Приём известный, но в готовых инструментах почти не встречается. Отдельно утилита читает состояние upstream и дату последнего коммита — из этих трёх признаков и складывается сортировка по мёртвости.

Что сделано ради безопасности

Никогда не удаляются: текущая ветка, основная, занятые другим worktree и попавшие под защиту (шаблон в git config или флагом). Ветки с уникальными коммитами пропускаются, пока не скажешь --force. Без явного указания области неинтерактивный запуск не удаляет ничего, а только показывает список. Если запись в журнал не удалась, ветка не удаляется: необратимое удаление без возможности отката хуже, чем невыполненная уборка. Логика классификации вынесена в отдельный модуль без единого вызова git и покрыта тестами.

заметка куратора

Редкий случай, когда утилита делает ровно одну вещь, которой нет в стандартном инструменте: находит ветки, влитые сквошем. Вся конструкция построена вокруг того, чтобы не потерять работу, — журнал пишется до удаления, и без записи в него ветка не удаляется. Три критические ошибки нашлись на ревью до релиза, включая ту, из-за которой главная функция не работала.

автор · @artps
для автора · бейдж на ваш сайт
запущено на vibecoded.ru
<a href="https://vibecoded.ru/products/git-nanny">
  <img src="https://vibecoded.ru/badge.svg" alt="запущено на vibecoded.ru" width="200" height="44">
</a>

Похожие запуски