Ветка в Git — это подвижный указатель на коммит. Создание ветки не копирует файлы и занимает миллисекунды, поэтому ветвиться стоит под любую задачу, даже под правку опечатки.
Создать и переключиться
Современная команда для этого одна:
git switch -c feature/login
Флаг создаёт ветку и сразу переходит на неё. Старый способ через git checkout -b тоже работает, но switch появился именно для переключения и потому понятнее. Посмотреть список ветвей и текущую позицию можно командой git branch.
git switch main и git pull. Ветка, отросшая от устаревшего состояния, гарантирует лишние конфликты при слиянии — это самая частая причина мучений новичков.Работа внутри ветки
git status— что изменено и что попадёт в коммит.git add файлилиgit add -pдля выборочного добавления кусков.git commit -m "краткое описание"— фиксация изменений.git push -u origin feature/login— первая отправка ветки на сервер, дальше достаточноgit push.
Коммиты делайте маленькими и осмысленными: один коммит — одно логическое изменение. Так проще откатывать и читать историю.
Слияние
Переключитесь на целевую ветку, обновите её и влейте свою:
git switch main
git pull
git merge feature/login
Если в основной ветке ничего не менялось с момента ответвления, Git просто передвинет указатель — это называется быстрым слиянием. Если менялось, будет создан коммит слияния. После успешного вливания ветку можно удалить: git branch -d feature/login.
Merge или rebase
| merge | rebase | |
|---|---|---|
| История | Сохраняется как было, с точками слияния | Линейная, как будто писали подряд |
| Безопасность | Не меняет прошлые коммиты | Переписывает их |
| Когда применять | Общие ветки, куда смотрят другие | Своя локальная ветка перед отправкой |
Золотое правило: не переписывайте историю ветки, которую кто-то уже забрал себе. Для своей персональной ветки rebase удобен и даёт чистую историю.
Конфликт: что делать
Конфликт означает, что один и тот же участок файла изменён в двух ветках по-разному. Git не угадывает и просит решить вручную. В файле появятся маркеры: сверху ваш вариант, снизу вариант из вливаемой ветки, между ними разделитель. Порядок действий такой:
- Откройте файл, оставьте нужный код и удалите все маркеры конфликта.
- Проверьте, что код работает — не просто «маркеры убраны».
git add файл, чтобы отметить конфликт решённым.git commitдля завершения слияния.- Если запутались, откатите всё командой
git merge --abortи начните заново.
Полезные привычки
- Называйте ветки по смыслу:
feature/,fix/,refactor/и краткое описание. - Держите ветку короткой по времени жизни: чем дольше живёт, тем больнее слияние.
- Перед слиянием подтяните основную ветку в свою — конфликты разрешите у себя, а не в общей ветке.
- Удаляйте влитые ветки, чтобы список не превращался в свалку.
Частые ошибки
- Ответвляются от устаревшей основной ветки и получают горы конфликтов.
- Делают rebase ветки, которую уже забрали коллеги.
- Убирают маркеры конфликта, не проверив работоспособность кода.
- Копят изменения неделями в одной ветке.
- Работают прямо в основной ветке, потому что «правка маленькая».
Что запомнить
Обновите основную ветку, создайте свою через git switch -c, делайте небольшие коммиты, перед слиянием снова подтяните основную. Конфликты решаются вручную и завершаются через add и commit, а git merge --abort всегда даёт откатиться. Rebase — для своих локальных ветвей, merge — для общих.
Коротко: вопросы и ответы
Чем switch отличается от checkout? Checkout делает слишком много разного. Switch отвечает только за переключение ветвей, поэтому безопаснее.
Как удалить ветку на сервере? Командой git push origin --delete feature/login.
Можно ли восстановить удалённую ветку? Да, если коммиты ещё не собраны сборщиком мусора: найдите нужный коммит в git reflog и создайте ветку от него.
Комментарии