Что такое ветка
Ветка — подвижный указатель на коммит. Создание ветки мгновенное и ничего не копирует. Ветки позволяют вести разные задачи изолированно: новая функция, исправление ошибки, эксперимент.
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/logingit 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/loginAuto-merging app.txtCONFLICT (content): Merge conflict in app.txtAutomatic merge failed; fix conflicts and then commit the result.В файле появятся маркеры:
<<<<<<< HEADВерсия из main=======Версия из feature/login>>>>>>> feature/loginПорядок действий:
- Откройте файл, выберите нужный вариант или объедините оба.
- Удалите строки
<<<<<<<,=======,>>>>>>>. - Добавьте файл и завершите слияние:
git add app.txtgit commitПолезно:
git statusgit diff --name-only --diff-filter=Ugit merge --abortgit 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.
