Работа с Git в команде

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

Ветки (англ. «branches»)

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

Прежде чем начать писать новую часть проекта, для неё создают отдельную ветку в Git. Когда работа доделана, эту побочную ветку после ревью «вливают» в главную. Таким образом в главной ветке всегда будет стабильная версия проекта.

Основная ветка разработки называется master или main. Обычно в ней хранят финальную версию кода. Ветка master создаётся автоматически, когда в проекте инициализируется Git и создаётся первый коммит.

Чтобы увидеть все ветки и узнать, на какой ветке вы находитесь сейчас, введите команду git branch:

git branch  # команда для просмотра веток
* master  # основная ветка проекта, звёздочкой отмечено, что вы в ней 

Нажмите Q, чтобы покинуть режим просмотра веток.

Создать новую ветку можно командой git branch название_ветки. Название ветки лучше выбирать исходя из того, что в ней будет происходить. Имя ветки не должно содержать пробелов: это вызовет ошибку.

git branch develop  # Создали новую ветку с именем develop
git branch  # Проверили, в какой ветке находимся
develop  # Появилась новая ветка
* master  # Но мы пока находимся в ветке master 

Ветка создана, но мы пока находимся в ветке master. Чтобы переключиться в ветку develop, введите команду git checkout develop:

git checkout develop  # Переключились в ветку develop
git branch #  Проверили: "Где я?"
* develop
master 

Можно создать ветку и сразу переключиться на неё:

git checkout -b develop  # Создали ветку develop и сразу переключились на неё 

Есть разные подходы к именованию веток, каждая команда разработки выбирает свой. При любом подходе ветки называют так, чтобы всем было понятно, что в них происходит.

В именах веток можно использовать разделители (например, тире или точку), но чаще всего применяют слеш /.

Если ветка создана для разработки нового функционала проекта, её имя может начинаться со слова feature:

git checkout -b feature/email-validation 

Если в ветке планируется ловля и исправление багов, ей подойдёт название, начинающееся с bugfix:

git checkout -b bugfix/resize-image 

Слияние веток (англ. «merge«)

После решения задачи вашу изолированную ветку нужно объединить с веткой master, залить в неё результаты вашей работы. Этот процесс называется «слияние веток», или merge.

Чтобы объединить («смёрджить») ветки, нужно переключиться в ветку, куда должны попасть изменения и из неё выполнить команду на слияние.

Чтобы залить код из ветки develop в ветку master, сперва переключаемся на ветку, в которую будут залиты изменения

git checkout master  # Переключились в master 

Теперь нужно переместить все коммиты из develop в ветку master, смёржить ветки:

git merge develop 

Если всё прошло хорошо, Git сообщит, сколько строк кода изменилось и в каких файлах. Но иногда при слиянии веток могут возникнуть «конфликты»: например, два разработчика в разных ветках изменили код в одной и той же строке, и после слияния Git не может решить, какой код оставить в финальной версии.

Git сообщает о конфликтах:

git merge develop
# Сливаем ветку develop в master

CONFLICT (content): Merge conflict in [название вашего файла]
Automatic merge failed; fix conflicts and then commit the result. 

В коде файлов с конфликтами Git даёт подсказки на тех строках, где в разных ветках текст отличается. Например:

<<<<<<< HEAD
one two three four five
=======
1 2 3 4 5
>>>>>>> develop 

В этом файле произошёл конфликт — в ветке master (на неё указывает заголовок HEAD) строка состоит из слов, а в ветке develop — из цифр. Git не понимает, какой из вариантов оставить. Если правильный вариант — это строка чисел, нужно удалить всё лишнее:

1 2 3 4 5 

Эту процедуру повторяют для всех конфликтующих файлов. После этого делается коммит, чтобы зафиксировать изменения — и ещё раз мёрж. Теперь слияние веток должно получиться!

Когда работа с веткой закончена и она больше не нужна, её можно удалить: git branch -d имя_ветки (флаг d — от англ. delete, «удалить»):

git branch -d develop
# Удалили ветку develop 

Чаще выполняйте команду git pull, чтобы иметь актуальное состояние репозитория.

Основные команды для работы с ветками:

git branch <название_ветки> — создать новую ветку.
git checkout <название_ветки> — переключиться в ветку.
git checkout -b <название_ветки> — создать ветку и сразу переключиться в неё.
git branch -d <название_ветки> — удалить ветку.

Чтобы всё прошло хорошо, нужно переключиться из удаляемой ветки.git merge <название_ветки> — скопировать все изменения из ветки в ветку. Чтобы перенести изменения из ветки develop в ветку master, нужно находиться в ветке master и выполнить команду git merge develop.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: