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



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

Оптимизировав рабочий процесс 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 [email protected]{1}[email protected]{0} "[email protected]"'

Данный псевдоним запускается в работу путем выполнения 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 [email protected]: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 с оператором !, способствующие оптимизации рабочего процесса. 



109   0  
    Ничего не найдено.

Добавить ответ:
Отменить.