Принятое решение довольно хорошее, но есть одна проблема, заключающаяся в удалении локальных ветвей, которые еще не были объединены в удаленный.
Если вы посмотрите на вывод, вы увидите что-то вроде
$ git branch --merged master -v
api_doc 3a05427 [gone] Start of describing the Java API
bla 52e080a Update wording.
branch-1.0 32f1a72 [maven-release-plugin] prepare release 1.0.1
initial_proposal 6e59fb0 [gone] Original proposal, converted to AsciiDoc.
issue_248 be2ba3c Skip unit-for-type checking. This needs more work. (#254)
master be2ba3c Skip unit-for-type checking. This needs more work. (#254)
Ветви bla
и issue_248
- это локальные ветви, которые будут удалены без вывода сообщений.
Но вы также можете увидеть слово [gone]
, которое указывает ветви, которые были перенесены на удаленный (который теперь пропал) и, следовательно, обозначает ветви, которые можно удалить.
Исходный ответ, таким образом, можно изменить на (разделить на многострочный для более короткой длины строки)
git branch --merged master -v | \
grep "\\[gone\\]" | \
sed -e 's/^..//' -e 's/\S* .*//' | \
xargs git branch -d
для защиты еще не слитых веток.
Кроме того, подсказка для мастера для его защиты не требуется, так как она имеет удаленный источник и не отображается как пропавшая.