Введение
Как работают ветки Git: создание, переключение, слияние, разрешение конфликтов и выбор стратегии. С примерами.

Ветка — это лёгкий подвижный указатель на коммит. Она позволяет вести работу над новой функцией, исправлением ошибки или экспериментом в изоляции — не затрагивая код, на который опираются все остальные. Когда работа завершена, ветку сливают обратно, и её изменения становятся частью основной линии разработки.
Эта страница представляет собой обзор раздела книги, посвящённого ветвлению. Здесь описаны команды для создания веток, переключения между ними, их объединения и удаления, а также способы обработки конфликтов, которые могут возникнуть, когда две линии работы изменяют один и тот же код. Каждый раздел ссылается на отдельную главу с подробным описанием. К концу этой части вы должны уверенно владеть повседневным процессом ветвления, показанным в примере ниже.
git branch
Команда git branch создаёт, перечисляет и удаляет ветки. Она не переключает между ветками и не сливает разветвившуюся историю — для этого предназначены git checkout и git merge. Создание ветки просто добавляет новый указатель на текущий коммит; файлы не копируются и история не изменяется, поэтому ветвление в Git происходит быстро и без лишних затрат.
git branch # list local branches (the current one is marked with *)
git branch new-feature # create a branch called new-feature
git branch -d old-work # delete a branch that has already been mergedВетку Git лучше всего воспринимать как указатель на снимок ваших изменений, а не как отдельную копию проекта.
git checkout
Команда git checkout переключает ветки или восстанавливает файлы рабочего дерева. При переключении Git обновляет файлы в рабочем каталоге, приводя их в соответствие с версией, хранящейся в целевой ветке, и перемещает указатель HEAD — ссылку, отслеживающую «текущее положение» — на эту ветку.
git checkout new-feature # switch to an existing branch
git checkout -b new-feature # create new-feature AND switch to it in one stepВ современных версиях Git для переключения между ветками можно также использовать git switch; команда checkout остаётся наиболее широко документированной. Флаг -b — это форма, которую вы будете использовать чаще всего при начале работы.
git merge
Команда git merge объединяет независимые линии разработки в одну ветку. Сначала нужно переключиться на ветку, которая должна принять изменения, а затем слить в неё другую ветку. Git выполняет слияние одним из двух способов:
- Fast-forward — если в принимающей ветке нет собственных коммитов с момента ответвления другой ветки, Git просто перемещает указатель вперёд. Новый коммит при этом не создаётся.
- Трёхстороннее слияние — если обе ветки содержат новые коммиты, Git объединяет их и создаёт специальный merge-коммит с двумя родителями.
git checkout main # the branch that will receive the work
git merge new-feature # bring new-feature's commits into main
git branch -d new-feature # delete the merged branch (now redundant)Конфликты слияния
Конфликт слияния возникает, когда Git не может автоматически объединить две ветки — как правило, когда обе ветки изменяют одни и те же строки одного файла или когда одна ветка удаляет файл, изменённый другой. Git приостанавливает слияние и отмечает конфликтующие области в затронутых файлах маркерами конфликта следующего вида:
<<<<<<< HEAD
the change on the current branch
=======
the change coming from the other branch
>>>>>>> new-featureКонфликт разрешается путём редактирования файла до желаемого конечного состояния, удаления маркеров, а затем добавления файла в индекс и создания коммита. Работа в изолированных ветках делает конфликты небольшими и редкими, однако они являются нормальной частью совместной разработки — а не признаком того, что что-то пошло не так.
Стратегии слияния Git
Когда работа готова к слиянию в основную линию, Git применяет стратегию слияния — алгоритм, используемый для объединения веток. Если стратегия не указана явно, Git самостоятельно выбирает разумный вариант по умолчанию (ort в текущих версиях, ранее — recursive) в зависимости от задействованных веток. Как правило, устанавливать стратегию вручную не нужно; полезно просто знать об их существовании для редких случаев, когда конкретная стратегия может помочь.
Типичный процесс ветвления
Если объединить все команды вместе, разработка отдельной функции обычно выглядит так:
git checkout -b add-login # 1. branch off main and switch to it
# ... edit files, then ...
git add .
git commit -m "Add login form"
git checkout main # 2. switch back to the receiving branch
git merge add-login # 3. integrate the feature
git branch -d add-login # 4. clean up the merged branchЧтобы углубиться в тему, перейдите к git branch для полного набора операций с ветками или сразу к процессу работы с feature-ветками, чтобы увидеть этот шаблон на практике в реальной команде.