Добавить в корзинуПозвонить
Найти в Дзене
Nuances of programming

Как удалять локальные ветки с помощью псевдонимов Git

Источник: Nuances of Programming Оптимизировав рабочий процесс Git и приступив к пул-реквестам, вы обнаруживаете гору объединенных локальных веток, которые стоило бы удалить. Данное руководство научит не только с легкостью решать эту задачу, но и создавать псевдонимы Git (англ. alias) с возможностью повсеместного переиспользования. Удаление одной локальной ветки Для удаления одной локальной ветки достаточно открыть интерфейс Git GUI и нажать delete применительно к выбранной ветке. Однако оправдаем свое звание разработчика, продемонстрировав умение работать с терминалом. Переключаемся на терминал и удаляем ветку следующей командой: git branch -d YOUR_BRANCH К сожалению (или к счастью), команда подходит для удаления ветки, которая уже подверглась слиянию. При желании удалить ветку, которая еще не прошла эту процедуру, задействуем заглавную букву D: git branch -D YOUR_BRANCH Удаление всех локальных веток При наличии нескольких локальных веток целесообразно удалить все одной командой, а не
Оглавление

Источник: Nuances of Programming

Оптимизировав рабочий процесс Git и приступив к пул-реквестам, вы обнаруживаете гору объединенных локальных веток, которые стоило бы удалить.

Данное руководство научит не только с легкостью решать эту задачу, но и создавать псевдонимы Git (англ. alias) с возможностью повсеместного переиспользования.

Удаление одной локальной ветки

Для удаления одной локальной ветки достаточно открыть интерфейс Git GUI и нажать delete применительно к выбранной ветке.

Однако оправдаем свое звание разработчика, продемонстрировав умение работать с терминалом.

Переключаемся на терминал и удаляем ветку следующей командой:

git branch -d YOUR_BRANCH

К сожалению (или к счастью), команда подходит для удаления ветки, которая уже подверглась слиянию. При желании удалить ветку, которая еще не прошла эту процедуру, задействуем заглавную букву D:

git branch -D YOUR_BRANCH

Удаление всех локальных веток

При наличии нескольких локальных веток целесообразно удалить все одной командой, а не применять delete к каждой по отдельности.

Для реализации функции, выполняющей данную задачу, важно знать, что git branch -D может обрабатывать одновременно несколько файлов.

С учетом этого сначала напишем команду для поиска всех веток в репозитории:

git branch | grep -v \*

При выполнении данной команды в CLI вы увидите, что в поиск также включены главная и/или защищенные ветки: master, main, release и т.д.

Вы можете настроить вышеуказанную команду под свои потребности (в данном случае main/master/develop). Рассмотрим пример:

git branch | grep -v "main\|master\|develop"

Кроме того, можно добавить флаг --merged, ограничивающий поиск только объединенными ветками:

git branch --merged | grep -v "main\|master\|develop"

Теперь передаем результат в команду delete, рассмотренную в предыдущем разделе:

git branch --merged | grep -v "main\|master\|develop" | xargs git branch -D

Выполнение данной команды в любом репозитории Git (в котором main/master являются защищенной веткой) приведет к удалению всех объединенных веток, не имеющих локальных изменений. С помощью -d можно отменить команду, если вдруг вы забыли --merged.

Важное примечание

Если при выполнении этого скрипта вы находитесь на измененной ветке, то операция закончится ошибкой not found (не найдено):

error: branch '*' not found.

Во избежание данной проблемы скорректируем команду, добавив в конце \|*. Пример:

git branch --merged | grep -v "main\|master\|develop\*" | xargs git branch -D

Создание псевдонима Git

Простые псевдонимы Git

Псевдонимы Git  —  это функциональность, которая упрощает и оптимизирует работу с Git. Она объединяет команды в псевдоним, которым можно воспользоваться в любое время.

Приведем примеры востребованных псевдонимов:

  • co для переключения веток и выгрузки их содержимого в рабочий каталог;
  • ci для коммита.

Для настройки этих псевдонимов выполняем:

git config --global alias.co checkout
git config --global alias.ci commit

К сожалению, простые псевдонимы Git не позволяют корректно задействовать оператор конвейера и передавать результаты одной команды в другую.

К счастью, Git позволяет использовать оболочку в создании псевдонимов!

Сложные псевдонимы Git

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

  • параметры и расширения оболочки;
  • многочисленные команды git;
  • утилиту grep, конвейеры (англ. pipe) и другие установленные инструменты командной строки Unix.

Для создания нового псевдонима Git можно воспользоваться следующим шаблоном и добавить свою команду:

fancy_alias = "!f() { (your complex commands here) }; f"

В этом псевдониме применяется простой прием обертывания фактической команды git в анонимную функцию bash (или, точнее сказать, в функцию с именем f()). При таком подходе получить доступ к переменным командной строки и расширениям оболочки можно следующим образом:

  • использовать $1, $2 и $3 для первого, второго и третьего параметров, переданных в псевдоним Git;
  • связать команды git в цепочки с помощью &&;
  • передать результаты по конвейеру посредством |;
  • задействовать полный набор инструментов Unix.

Рассмотрим действие функциональности сложных псевдонимов Git на двух практических примерах:

1. Показ коммитов с момента последней команды git

git config --global alias.new = !sh -c 'git log $1@{1}..$1@{0} "$@"'

Данный псевдоним запускается в работу путем выполнения git new и предоставления HEAD:

git new HEAD

2. Добавление удаленного репозитория в локальный

git config --global alias.ra = "!f() { git remote add $1 $2; }; f"

Псевдоним готов к работе после выполнения git ra и добавления имени и URL удаленного репозитория:

git ra cool_remote git@github.com:paulknulst/nestjs-starter.git

Создание псевдонима для удаления веток

Зная способ создания расширенного псевдонима Git, воспользуемся предыдущей информацией и обернем команду анонимной функцией bash с именем f():

'!f() { git branch --merged | grep -v "main\|master\|develop\|*" | xargs git branch -D; }; f'

Далее с помощью команды git config создаем глобальный псевдоним Git для пользователя, в настоящий момент вошедшего в систему:

git config --global alias.clean-branches '!f() { git branch --merged | grep -v "main\|master\|develop\|*" | xargs git branch -D; }; f'

Заключение

Бывает, что вы забываете удалять локальные ветки сразу же после закрытия пул-реквеста, и они со временем накапливаются. Возможно, удаленная ветка уже устранена, но зато ежедневно растет локальный каталог. К счастью, теперь вы знаете способ решения этой проблемы и можете реализовать его в CLI для удаления окончательно объединенных локальных веток.

Кроме того, вы научились использовать простые и сложные псевдонимы Git с оператором !, способствующие оптимизации рабочего процесса.

Читайте также:

Читайте нас в Telegram, VK

Перевод статьи Paul Knulst: How to Remove Local Git Branches by Creating Git Aliases