Как выполнить пакетное удаление избыточных удаленных веток git?

У меня есть относительно большая коллекция удаленных веток из старого удаленного репо:

$ git branch -r
  guy/feat1
  guy/feat2
  guy/feat3
  guy/feat4
  guy/feat5
  guy/feat6
  guy/feat7
  guy/feat8
  origin/HEAD
  origin/master

Есть ли одна команда, которая удаляла бы все guy ветки?

Репо больше не имеет guy в качестве удаленного репо.


git
person eoinoc    schedule 17.03.2013    source источник


Ответы (3)


git branch -r | grep guy/ | xargs git branch -d

(Предполагая, что знаки $ на самом деле не являются частью вашего вывода ...)

person Thomas    schedule 17.03.2013
comment
Я принимаю это как правильный ответ, поскольку, похоже, он работает. Однако у меня были большие проблемы. При запуске этой команды я получил сообщения error: branch 'guy/feat1' not found.. Даже изменение -d на -D не помогло. В конце концов, следующий ответ сработал для меня: stackoverflow.com/a/11050880/248220 - person eoinoc; 17.03.2013
comment
Еще один способ повторения в Git: git for-each-ref --format='%(refname)' 'refs/remotes/guy/*' | xargs git branch -d - person kostix; 18.03.2013

Вы также можете попробовать (из git remote):

git remote --prune guy

С участием:

prune

Удаляет все устаревшие ветки удаленного отслеживания в <name>.
Эти устаревшие ветки уже были удалены из удаленного репозитория, на который ссылается <name>, но по-прежнему доступны локально в «remotes /».

С опцией --dry-run укажите, какие ветви будут обрезаны, но не обрезайте их на самом деле.

См. Также «Разница между git remote prune и git branch -d -r»

если парень больше не является действующим удаленным репо, тогда:

git gc --prune=now

очистит эти ветки (вместе с некоторыми коммитами, на которые нет ссылок, поэтому используйте его с осторожностью)
Подробнее см. "Как удалить недопустимую ссылку на удаленную ветку из Git?": обычно безопаснее просто использовать: git branch -rd guy/badbranch, если возможно, но если это не работает, то git gc --prune=now тоже может быть решением.

person VonC    schedule 17.03.2013
comment
Похоже, эта команда не актуальна, когда guy больше не доступен удаленно. Результатом выполнения команды является: fatal: 'guy' does not appear to be a git repository. fatal: The remote end hung up unexpectedly. Я предполагаю, что логика заключается в том, что команда проверяет, каких ветвей больше нет в этом удаленном репо. - person eoinoc; 17.03.2013
comment
Я уже пробегал git gc -prune=now. Было похоже, что он сжал репо, но удаленные ветки остались. - person eoinoc; 17.03.2013

Чтобы удалить удаленную ветку, вы можете использовать git push <remote-repo> :branch-to-delete обратите внимание на двоеточие перед удалением ветки. Также см. Удаление нескольких удаленных ветвей в git ... Здесь показано, как построить однострочник для удаления нескольких веток за один раз.

person Gavin    schedule 17.03.2013