Поиск по сайту:

Как удалить ветки Git в локальном и удаленном репозиториях


Ветки — это основная часть рабочих процессов Git, которые используются для предотвращения попадания незавершенного кода в основную кодовую базу. Однако, если вы много работаете с ними, у вас может быть куча неиспользуемых ссылок на ветки в вашем списке веток, которые необходимо удалить.

Зачем удалять ветки?

Важно понять, как работают ветки, прежде чем приступать к их удалению. Во-первых, вы на самом деле не удаляете какой-либо код — вы удаляете ссылку на ветку, что в некоторых случаях может привести к потере данных, но для большинства рабочих процессов совершенно безвредно.

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

Ветви функций — это ответвления в этой цепочке, создающие две расходящиеся истории. Когда вы создаете фиксацию в новой ветке, создается ссылка на ветку, которая указывает на эту фиксацию. Коммиты слияния объединяют их вместе, а также перемещают метку feature, чтобы она соответствовала master.

На данный момент feature и master оба делают одно и то же. Вы можете удалить ссылку на feature, и код не будет потерян. Если вы не собираетесь повторно использовать эту ветку, лучше всего просто удалить ее.

Однако это может привести к потере данных, если ссылка на ветку указывает на коммиты, которые не были объединены с временной шкалой master (или другой веткой). Git распознает, что эти коммиты больше не нужны, поскольку нет ссылки на активную ветку, которая включает их, и очистит их при сборке мусора.

Вы также можете не удалять ветки. Однако ссылка на ветку не будет перемещаться вместе с master, которая будет продолжать пыхтеть. Если вы сделаете новую фиксацию в функциональной ветке, она создаст «новую ветку» в истории, которую можно объединить, но она может сильно устареть.

По этой причине, если вы постоянно не объединяете две ветки, лучше всего удалять ветки функций после их слияния, чтобы очистить историю.

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

Git не позволит вам удалить ветку, на которой находится HEAD, поэтому вам нужно будет переключить рабочую ветку обратно на master. Если, конечно, вы не хотите по какой-то причине удалить master.

git checkout master

Затем вы можете использовать git branch с флагом -d для удаления ветки:

git branch -d branch_name

Из-за того, как Git обрабатывает ветки, эта команда может завершиться ошибкой при определенных обстоятельствах. На самом деле Git поддерживает три ветки для каждой «ветки»: локальную ветку, удаленную ветку и ветку удаленного отслеживания, обычно называемую origin/branchname.

Флаг -d удалит только ветки, которые были отправлены и объединены в ветку удаленного отслеживания. Обычно это то, что вам нужно для обычных операций, но если вы хотите принудительно удалить его, вы можете снова запустить ту же команду с флагом -D с большой буквы:

git branch -D branch_name

Имейте в виду, что это приведет к потере данных, если коммиты не объединены.

Удалить удаленную ветвь

Удаление веток на удаленном компьютере также легко. Чтобы удалить удаленные ветки, запустите git push с флагом -d , что приведет к удалению ветки, если у вас есть для этого доступ.

git push origin -d branch_name

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

Однако это не приведет к отправке изменений на клиентские машины, пока они не запустят git fetch с флагом --prune , который очистит старые ветки:

git fetch --all --prune

Автоматическое удаление веток Github Pull Request

Github на самом деле имеет хорошую функцию для репозиториев, чтобы автоматически очищать ветки, созданные из запросов на вытягивание. Вы можете включить его в настройках, в разделе «Параметры» > «Кнопка слияния»: