Работа с ветками в Git: создание, слияние, удаление
Полный цикл работы с веткой — от именования до удаления после мержа. С разбором реального случая, когда слияние упало в конфликты.
miki/rabota-s-vetkami-v-git-sozdanie-sliyanie-udalenie · v1
Полный цикл работы с веткой — от именования до удаления после мержа. С разбором реального случая, когда слияние упало в конфликты.
Ветка позволяет работать над изменением, не трогая то, что уже работает. Это главное, что даёт git: эксперимент становится бесплатным.
Порядок такой: обновиться → создать ветку → коммиты → синхронизация → push → pull request → мерж → удаление ветки.
Главное правило: ветку создавай до того, как начал менять файлы, а не после. Иначе легко обнаружить себя с коммитами не в той ветке.
Имя ветки читают другие люди — оно должно сразу говорить, что внутри.
| Префикс | Для чего | Примеры |
|---|---|---|
feature/ | Новая функциональность | feature/user-authentication, feature/payment-integration |
fix/ | Исправление ошибки | fix/login-bug, fix/typo-in-readme |
enhancement/ | Улучшение существующего | enhancement/performance-optimization |
test/ | Тесты | test/add-unit-tests, test/integration-tests |
docs/ | Документация | docs/improve-readme, docs/api-documentation |
Правила:
- Префикс обязателен — по нему виден тип изменения без чтения кода.
- Описывай, а не нумеруй.
feature/new-styleпонятно,feature/task-42— нет. - Слова через дефис:
feature/new-style, а неfeature/newstyle. - Без пробелов — имя с пробелом придётся каждый раз экранировать в терминале.
Цикл работы
Перед созданием ветки убедись, что у тебя свежий код.
В старых статьях встретится git checkout main — это то же самое. switch появился позже и делает только переключение, а checkout умеет слишком много разного.
В некоторых проектах основная ветка называется master или development — посмотри git branch -a.
git switch main && git pull origin main- git status говорит, что ты на основной ветке
- Ветка синхронизирована с сервером
Флаг -c создаёт ветку и сразу переключает на неё.
Старый вариант той же команды: git checkout -b feature/new-feature.
Проверь, что переключился: git status всегда первой строкой пишет текущую ветку.
git switch -c feature/new-feature- git status показывает новую ветку
- Имя ветки с префиксом и описывает задачу
git add . добавляет всё сразу — удобно, но опасно: легко захватить лишнее. Сначала смотри git status, потом добавляй.
Лучше несколько осмысленных коммитов, чем один огромный: так любое изменение можно откатить отдельно.
git status- В ветке есть минимум один коммит
- В коммит не попало ничего лишнего
Если работа идёт не один день, основная ветка уходит вперёд.
Если возникнут конфликты, git о них скажет и остановится.
git merge main- Ветка содержит свежие изменения из основной
Флаг -u связывает локальную ветку с удалённой — дальше достаточно просто git push.
git push -u origin feature/new-feature- Ветка видна на GitHub
- git status пишет, что ветка отслеживает удалённую
На GitHub, GitLab или Bitbucket создай PR из своей ветки в основную.
В описании напиши, что сделано и зачем. Если есть связанная задача — добавь Closes #12, тогда она закроется автоматически при мерже.
- PR открыт из ветки в основную, а не наоборот
- В описании понятно, зачем это изменение
Удаление
После того как PR смержен:
Важно про -d и -D: маленькая -d откажется удалять ветку, если её коммиты никуда не слиты. Большая -D удалит в любом случае. Пользуйся -d — это встроенная защита от потери работы.
git branch -d feature/new-feature- Локальная ветка удалена
- Удалённая ветка удалена
- git branch -a больше её не показывает
Забыть этот шаг — классика: следующая ветка будет создана от устаревшего состояния, и круг замкнётся.
git switch main && git pull- Ты на основной ветке
- Твоё изменение видно в локальной копии
Ниже — реальный случай, а не учебный пример. Задача была: слить фича-ветку в development, а потом development в main.
Первая часть прошла чисто. На второй git выдал:
Что было сделано:
Слияние отменили целиком и вернулись к исходному состоянию. main остался нетронутым.
Почему это правильное решение. Когда конфликтов семь штук в незнакомых файлах, разбирать их наскоро в терминале — верный способ сломать стабильную ветку. merge --abort — это кнопка «отмена», и о ней надо знать заранее.
Но вот что важнее. Задача так и осталась невыполненной: в main ничего не уехало. Конфликты не исчезли — их просто отложили. Разобрать их всᑑ равно придётся, и лучше через pull request: там видно каждый конфликт отдельно, есть история обсуждения и можно откатиться без последствий.
Вывод: локальный git merge в main — плохая идея в принципе. Он обходит ревью и проверки. Слияние в основную ветку должно идти через PR.
Подробно и на русском — книга Pro Git, она бесплатная.

