Git. Удаляем все локальные ветки, отслеживающие удаленные с сервера
В Git есть ветки локальные, ветки на сервере и локальные копии веток на сервере, на которые ориентируются локальные. Если ввести команду git branch -a, то список последних будет находиться в самом конце. В Git 2.7.4 названия начинаются на remotes/, например, remotes/origin/master.
user@system:~/Project$ git branch
* develop
master
feature/one
feature/two
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
remotes/origin/feature/one
Теперь посмотрим связь локальных веток с удаленными (локальные в начале, а отслеживаемые в квадратных скобках)
user@system:~/Project$ git branch -vv
* develop 0fffd86 [origin/develop] Commit message
master f72fd61 [origin/master] Another commit message
feature/one 506f204 [origin/feature/one] One description
feature/two a3c5e7d Very local branch
Есть в Git такая штука git remote prune. Она позволяет очистить локальные копии удаленных веток, которых на сервере уже нет. При этом, совсем локальные ветки никак не затрагиваются. Удалим с сервера ветку feature/one и посмотрим связь снова.
user@system:~/Project$ git push origin --delete feature/one
user@system:~/Project$ git remote prune origin
user@system:~/Project$ git branch -vv
* develop 0fffd86 [origin/develop] Commit message
master f72fd61 [origin/master] Another commit message
feature/one 506f204 [origin/feature/one: пропал] One description
feature/two a3c5e7d Very local branch
Ветка feature/one все еще отслеживает origin/feature/one, но последней нет ни на сервере, ни в списке remotes/, о чем говорит нам слово "пропал". Найти все пропавшие ветки и вывести их список через пробел можно, например, вот так:
git branch -vv | awk '/\[(.+):\sпропал\]/ {print $1}' | paste -d ' ' -s
Ещё немного, ещё чуть-чуть, как поется в известной песне. Вспоминаем как удалять локальные ветки и получаем решение:
git remote prune origin && git branch -d $(git branch -vv | awk '/\[(.+):\sпропал\]/ {print $1}' | paste -d ' ' -s)
Точно актуально для Git 2.7.4 c русской локализацией. И не говорите, что я не предупреждал.