Удалите ветки git, чье имя соответствует определенному шаблону

Как удалить ветки в git, начиная с буквы "o"?

Предположим, у меня есть список ветвей вроде следующего:

origin_alpha
origin_beta
origin_gamma
alpha
beta
gamma

Я не хочу удалять ветки origin_alpha, origin_beta​​strong > и origin_gamma.

Ответ 1

Обновление: опция -r для xargs является дополнением GNU. Если вы не используете xargs из GNU findutils, это может не сработать. Вы можете опустить его, но это приведет к ошибке, если входные данные для xargs пустые.


Вы можете использовать git branch --list <pattern> и направить его вывод в xargs git branch -d:

git branch --list 'o*' | xargs -r git branch -d

Кстати, в приведенном выше коде есть небольшая проблема. Если вы в настоящее время извлекли одну из веток, которая начинается с o, вывод git branch --list 'o*' будет выглядеть следующим образом:

* origin_master
origin_test
o_what_a_branch

Обратите внимание на звездочку * перед именем текущей ветки.

Хотя вы не можете удалить текущую ветку в любом случае, это приводит к тому, что xargs также передает * в git branch delete.

Как я уже сказал, это просто косметическая ошибка, но если вы хотите избежать этого, используйте:

git branch --list 'o*' | sed 's/^* //' | xargs -r git branch -d

Ответ 2

Другой способ может быть таким:

git branch -d $(git branch | grep yourSearchPattern)

мне кажется более интуитивным, потому что grep - это то, чем я пользуюсь каждый день.

Вы также можете сделать его псевдоним (или любое другое решение, предложенное здесь), проверьте здесь, например, как передать аргументы псевдониму: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/

PS В вашем конкретном случае yourSearchPattern может быть источником:

git branch -d $(git branch | grep origin)

PPS в качестве следующего шага, также было бы неплохо сделать процесс удаления более подробным, например, было бы неплохо, чтобы вы подтвердили удаление для каждой ветки. Но я думаю, что это решает вопрос...

Ответ 3

Поздно на вечеринку, но другой способ сделать это -

git branch -d 'git branch | grep substring'

и для текущего вопроса

git branch -d 'git branch | grep origin'

Это удалит все ветки, имена которых содержат происхождение.