У нас у всех есть куча проектов. Мы работаем над фичами. Каждая фича - отдельная локальная ветка. Мы её делаем, пушим, открываем PR, PR мержат, ветку на сервере удаляют.
А локальная ветка остаётся. И так каждый раз. Через полгода у тебя в
git branch тридцать восемь веток:feature/login
feature/login-fix
fix/typo
topic/auth
topic/auth-v2
...
main
И ты такой сидишь и думаешь: “Какая из них ещё живая? Какие уже смержены? Можно ли что-то удалить или я что-то потеряю?”.
И вот ты уже пишешь скрипт на коленке, который тебе должен всё почистить. Запускаешь его и вуаля, ты слегка ошибся и больше в твоей репе нет бранчей, паника и судорожный поиск решения на https://ohshitgit.com/.
В общем, короче. Harald Nordgren походу сам задолбался с этим и ребята только что релизнули Git 2.56, в котором запилили опцию delete-merged.
Самое классное, что команда супер простая и простая как полено (хоспадепрости patch-format с 100500 аргументами).
$ git branch --delete-merged 'origin/*' --dry-run
Would delete branch feature/login (was abc1234).
Would delete branch feature/login-fix (was def5678).
Would delete branch fix/typo (was 9876fed).
Посмотрел. Всё выглядит нормально. Запускаешь без
--dry-run:$ git branch --delete-merged 'origin/*'
Deleted branch feature/login (was abc1234).
Deleted branch feature/login-fix (was def5678).
Deleted branch fix/typo (was 9876fed).
Всё. Ветки, которые уже влиты в свой
origin, снесены. Ветки, где есть неотправленная работа, - остались. Ветки с deleteMerged = false - остались. Ветки, которые ты вычеканил в другом worktree, - остались.Это безопасно. Свои скрипты можно выкинуть. Также можно точечно чистить категориями
topic-*, feature/*, origin/* .В общем, если git branch уже не помещается в терминал - обновляемся на 2.56 и теперь вы знаете что делать.
—
Telegram | Github | YouTube | X