Статьи

Небольшой курс по Git — от первых команд до командной работы и выката в прод

Ветки и слияние

Страница 2 из 8 · 2026-10-25 · 2 мин чтения

Что такое ветка

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

main:     A---B---C                   \feature:            D---E

Команды

git branchgit branch -agit branch feature/logingit switch feature/logingit switch -c feature/logingit switch maingit branch -m новое-имяgit branch -d feature/logingit branch -D feature/login
  • git switch -c создает ветку и сразу переключается на нее;
  • -d удаляет только слитую ветку, -D — принудительно.

Старый вариант: git checkout делает то же самое, но разделен на switch и restore.

Слияние

git switch maingit merge feature/login

Два сценария.

Fast-forward. Если в main не было новых коммитов, указатель просто сдвигается вперед:

до:     A---B  (main)             \              C---D  (feature)после:  A---B---C---D  (main, feature)

Merge-коммит. Если ветки разошлись, Git создает коммит слияния:

A---B---C-------M  (main)     \         /      D---E---+  (feature)

Принудительно создать merge-коммит: git merge --no-ff feature. Только fast-forward: git merge --ff-only feature.

Конфликты

Конфликт возникает, когда обе ветки изменили одну и ту же строку.

git merge feature/login
Auto-merging app.txtCONFLICT (content): Merge conflict in app.txtAutomatic merge failed; fix conflicts and then commit the result.

В файле появятся маркеры:

<<<<<<< HEADВерсия из main=======Версия из feature/login>>>>>>> feature/login

Порядок действий:

  1. Откройте файл, выберите нужный вариант или объедините оба.
  2. Удалите строки <<<<<<<, =======, >>>>>>>.
  3. Добавьте файл и завершите слияние:
git add app.txtgit commit

Полезно:

git statusgit diff --name-only --diff-filter=Ugit merge --abort

git merge --abort отменяет слияние и возвращает все как было. IDE (IntelliJ IDEA, VS Code) умеют показывать конфликты в удобном трехпанельном редакторе.

Как реже получать конфликты: небольшие ветки, частая синхронизация с main, не форматируйте чужие файлы целиком.

Типичный порядок работы с веткой

git switch maingit pullgit switch -c feature/searchgit add .git commit -m "Add search endpoint"git switch maingit merge --no-ff feature/searchgit branch -d feature/search

Именование веток

feature/login-formfix/null-pointer-in-parserhotfix/payment-timeoutchore/update-dependenciesdocs/readme-install

Префикс показывает тип задачи. Часто в имя добавляют номер задачи: feature/PROJ-123-login-form.