Полное руководство по ветвлению в Git: создание, переключение, удаление
Узнайте, как создавать, переключать, отслеживать, организовывать и безопасно удалять ветки Git в повседневных рабочих процессах разработки.
Полное руководство по ветвлению в Git: создание, переключение, удаление
Ветвление в Git позволяет работать над функцией, исправлением или экспериментом, не нарушая основную линию разработки. Хорошая привычка работы с ветками помогает организовать изменения и упрощает ревью, тестирование и откат.
Ветки — это легковесные указатели на коммиты. Это означает, что их создание, переключение и удаление происходит быстро, но ваши решения всё равно влияют на то, насколько понятной будет история проекта.
Что такое ветка Git
Ветка Git — это перемещаемое имя, указывающее на коммит. Когда вы делаете новый коммит в ветке, Git перемещает имя этой ветки вперёд, к новому коммиту.
В большинстве проектов есть основная ветка, например main или master. Команды обычно поддерживают её стабильной, а для конкретной работы создают краткосрочные ветки:
git switch -c fix-login-timeout
Эта команда создаёт новую ветку и переключается на неё. В более старых примерах Git может использоваться:
git checkout -b fix-login-timeout
Оба варианта распространены, но git switch читается проще, так как фокусируется только на перемещении ветки.
Имена веток должны быть достаточно конкретными, чтобы объяснять суть работы. feature — слишком расплывчато. feature/add-health-check-endpoint или fix/nginx-502-upstream-timeout — гораздо лучше. Понятное имя помогает вам и вашим ревьюерам понять назначение ветки ещё до открытия файлов.
Создание и переключение веток
Перед созданием ветки начните с правильной базы. Для большинства команд это означает сначала обновить основную ветку:
git switch main
git pull
git switch -c feature/add-metrics-endpoint
Это снижает вероятность того, что ваша новая ветка начнётся с устаревшего кода. Это не устраняет конфликты, но даёт более чистую отправную точку.
Чтобы вывести список локальных веток, выполните:
git branch
Текущая ветка помечена звёздочкой. Чтобы увидеть также удалённые ветки, используйте:
git branch -a
Чтобы переключиться на существующую ветку:
git switch branch-name
Если ветка существует только на удалённом репозитории, вы обычно можете создать локальную отслеживающую ветку с помощью:
git switch --track origin/branch-name
Отслеживание важно, потому что оно связывает вашу локальную ветку с её удалённым аналогом. После настройки отслеживания простые команды, такие как git pull и git push, знают, какую удалённую ветку использовать.
Для конкретного сценария представьте, что вам нужно исправить сбой конвейера Jenkins, одновременно работая над более крупной очисткой образов Docker. Поместите эти изменения в отдельные ветки. Срочный патч можно быстро проверить и объединить, а более крупная очистка может продолжаться, не блокируя его.
По смежным основам см. начало работы с репозиториями Git.
Поддержание порядка в ветках
Ветки становятся запутанными, если они остаются открытыми слишком долго или накапливают несвязанные изменения. Лучшая ветка обычно небольшая, сфокусированная и лёгкая для ревью.
Используйте одну ветку для одной цели:
- Ветка исправления ошибки должна содержать само исправление и связанные с ним тесты.
- Ветка функции должна содержать функцию, а не попутные рефакторинги.
- Ветка очистки должна избегать изменений поведения, если они явно не являются частью очистки.
Перед отправкой проверьте свою работу:
git status
git diff --staged
Это помогает выявить случайные файлы и несвязанные правки. Это особенно полезно в репозиториях DevOps, где сгенерированные файлы, локальные конфигурации и шаблоны секретов могут находиться рядом с реальными исходными файлами.
Когда вашей ветке нужны последние изменения из main, у вас есть два распространённых варианта:
git merge main
или:
git rebase main
Слияние сохраняет точную историю ветки. Перебазирование переписывает коммиты вашей ветки поверх последней базы. Оба варианта полезны, но команды должны согласовать, какой стиль они ожидают перед объединением общей работы. Если вы не уверены, предпочтите рабочий процесс, задокументированный вашим проектом.
Безопасное удаление веток
Удаление старых веток упрощает навигацию по репозиторию. После того как ветка была объединена, удалите её локальную копию с помощью:
git branch -d branch-name
Строчная -d — более безопасный вариант. Git отказывается удалять ветку, если считает, что работа не была объединена.
Если вам действительно нужно удалить не объединённую локальную ветку, используйте:
git branch -D branch-name
Используйте это с осторожностью. Это удаляет имя ветки, даже если коммиты не были объединены. Коммиты могут быть восстановлены в течение некоторого времени через reflog, но не стоит полагаться на это как на обычную страховку.
Чтобы удалить удалённую ветку:
git push origin --delete branch-name
Удаляйте удалённые ветки только тогда, когда работа объединена, заброшена или явно принадлежит вам. В общих командах удалённые ветки могут использоваться для ревью, предварительных просмотров развёртывания или другими разработчиками.
Вы можете очистить устаревшие ссылки на удалённые ветки с помощью:
git fetch --prune
Это удаляет локальные ссылки на удалённые ветки, которые больше не существуют на сервере. Это не удаляет реальные удалённые ветки.
Когда обращаться к коллеге
Создание и переключение веток — операции с низким риском. Рискованные моменты — это удаление не объединённой работы, принудительная отправка и перебазирование веток, которые могут уже использоваться другими.
Спрашивайте перед принудительной отправкой в общую ветку. Также спрашивайте перед удалением удалённой ветки, которую вы не создавали. В репозиториях с CI/CD ветка может запускать сборки, предварительные просмотры или правила развёртывания, которые не очевидны из самого Git.
Хорошее ветвление — это прежде всего ясность. Создавайте ветку от правильной базы, называйте её в соответствии с работой, держите её сфокусированной и удаляйте, когда она больше не нужна. Эти привычки делают Git проще для вас и безопаснее для всей команды.