Можете ли вы удалить несколько веток в одной команде с помощью Git? - PullRequest
288 голосов
/ 08 сентября 2010

Я бы хотел очистить свой локальный репозиторий, в котором есть тонна старых веток: например, 3.2, 3.2.1, 3.2.2 и т. Д.

Я надеялся на хитрый способ убрать многие из них одновременно. Поскольку они в основном придерживаются соглашения о точечном выпуске, я подумал, что, возможно, был ярлык, чтобы сказать:

git branch -D 3.2.*

и убейте все ветви 3.2.x.

Я попробовал эту команду, и она, конечно, не сработала.

Ответы [ 22 ]

3 голосов
/ 31 мая 2018

Для чистых душ, которые используют PowerShell, здесь небольшой скрипт git branch -d $(git branch --list '3.2.*' | %{$_.Trim() })

3 голосов
/ 08 июня 2016

Вам может понравиться этот маленький элемент ... Он тянет список и запрашивает подтверждение каждого элемента перед окончательным удалением всех выделенных элементов ...

git branch -d `git for-each-ref --format="%(refname:short)" refs/heads/\* | while read -r line; do read -p "remove branch: $line (y/N)?" answer </dev/tty; case "$answer" in y|Y) echo "$line";; esac; done`

Используйте -D для принудительного удаления (как обычно).

Для удобочитаемости, вот что разбито строка за строкой ...

git branch -d `git for-each-ref --format="%(refname:short)" refs/heads/\* |
    while read -r line; do 
        read -p "remove branch: $line (y/N)?" answer </dev/tty;
        case "$answer" in y|Y) echo "$line";; 
        esac; 
    done`

вот подход xargs ...

git for-each-ref --format="%(refname:short)" refs/heads/\* |
while read -r line; do 
    read -p "remove branch: $line (y/N)?" answer </dev/tty;
    case "$answer" in 
        y|Y) echo "$line";; 
    esac; 
done | xargs git branch -D

наконец, мне нравится иметь это в моем .bashrc

alias gitselect='git for-each-ref --format="%(refname:short)" refs/heads/\* | while read -r line; do read -p "select branch: $line (y/N)?" answer </dev/tty; case "$answer" in y|Y) echo "$line";; esac; done'

Таким образом, я могу просто сказать

gitSelect | xargs git branch -D.
3 голосов
/ 18 марта 2019

Если вы используете Windows, вы можете использовать Power Shell для удаления нескольких ветвей одновременно ...

git branch -D ((git branch | Select-String -Pattern 'feature-*') | foreach{$_.ToString().Trim()})

эта команда удалит все ветви, которые содержат слово "feature-" в качестве подстроки,

Вы также можете точно настроить, как должно работать сопоставление с шаблоном, используя команду Powershell Select-String.Взгляните на документы PowerShell .

1 голос
/ 24 января 2019

Используйте следующую команду, чтобы удалить все ветви (извлеченные ветви не будут удалены).

git branch | cut -d '*' -f 1 | tr -d " \t\r" | xargs git branch -d
1 голос
/ 27 ноября 2018

у меня работает правильно:

git branch | xargs git branch -d

git branch | xargs git branch -D

удалить все локальные филиалы

0 голосов
/ 12 октября 2018

git branch -D <branchName>

0 голосов
/ 29 марта 2018

Вы можете использовать эту команду: git branch -D $(printf "%s\n" $(git branch) | grep '3.2')

0 голосов
/ 12 октября 2017

Вы можете удалить все ветки, удалив все ненужные ссылки:

rm .git/refs/heads/3.2.*

0 голосов
/ 25 ноября 2016

Если вы работаете в Windows, вы можете использовать PowerShell для этого:

 git branch | grep 'feature/*' |% { git branch -D $_.trim() }

замените feature/* любым шаблоном, который вам нравится.

0 голосов
/ 12 апреля 2018

Вы можете использовать git gui для удаления нескольких веток одновременно. Из командной строки / Bash -> git gui -> Удаленный -> Удалить ветку ... -> выберите удаленные ветви, которые вы хотите удалить -> Удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...