Описание и преимущества Git
Git – известное решение, используемое в процессе разработки практически любого ПО. Он фактически стал промышленным стандартом благодаря своему главному преимуществу – возможности работы с разными версиями исходного кода. Основная идея ветвления заключается в “версионировании” кода и работ с каждой веткой независимо от остальных. Этот подход также удобен для тестирования разрабатываемых функций, поскольку позволяет безопасно вносить в код любые изменения, не беспокоясь о поломке чего-то в рабочей версии. Далее мы расскажем, как работать с ветвями git.
Ветка представляет собой независимую последовательность коммитов, где последнее подтвержденное изменение выступает всего лишь “указателем”, который сохраняет историю действий в виде связанных друг с другом шагов. Ветка по умолчанию обычно называется “main” или “master”.
Создание ветки
Перед созданием структуры ветвления необходимо инициализировать собственно экземпляр git с помощью, например, такого набора команд:
mkdir /root/gitrepo && cd /root/gitrepo && git init && touch firstfile && git add firstfile && git commit -m "initial commit"
Следом уже можно приступать к созданию новой ветки:
git branch <имя_ветки>
Наша ветка создана, но перед тем, как приступить к работе с ней, следует указать системе, что теперь мы будем работать именно с данной версией кода:
git checkout <имя_ветки>
Можно проверить, что ветка действительно создана и она является в данный момент “рабочей”:
git branch
Сохранение изменений в ветку
Внесем некоторые изменения в наш проект:
echo "First changes" > newfile.one
Затем сохраним эти изменения:
git commit -m “First changes commit”[/code]
Сравнение кода в ветках
Для просмотра различий в коде в разных ветках можно использовать такую команду:
git diff <одна_ветка>...<другая_ветка>
Мы увидим, что в нашу ветку был добавлен один файл, примененные на него разрешения, а также сообщение, содержащееся в коммите.
Слияние веток
Для отправки изменений из одной ветки разработки в другую используется функция “слияния” (merge). Для этого перейдите в ветку, куда нужно отправить изменения, выполните команду для слияния с веткой, в которой изначально содержались изменения, и сохраните работу:
git checkout master && git merge mynewbranch && git commit -m "merges one"
Конфликты слияния и их разрешение
Если две ветки содержат файл с одинаковыми именами, но разным содержимым, при попытке их слияния возникнет конфликт. Давайте сымитируем и затем разрешим эту ситуацию.
echo "original content" > conflict.file # Создаем новый файл
git add conflict.file # Добавляем этот файл в "главную" ветку
git commit -m "Conflict simulation - master, step 1" # Созраняем изменения в главной ветке
git checkout -b conflictbranch # Создаем новую ветку и переключаемся на нее
echo "changed content" > conflict.file # Изменяем файл
git add conflict.file # Добавляем этот файл в индекс другой ветки
git commit -m "Conflict simulation - conflictbranch, change 1" # Сохраняем изменения в альтернативной ветке
git checkout master # Возвращаемся в главную ветку
echo "re-changed content" > conflict.file # Вносим изменения еще раз
git add conflict.file # Снова добавляем этот файл в индекс главной ветки. Необходимо выполнять эту операцию каждый раз, иначе возникнет ошибка
git commit -m "Conflict simulation - master, step 2" # Фиксируем последние изменения
Если мы попытаемся выполнить слияние этих веток, увидим ошибку:
Чтобы решить эту проблему, нужно изменить файл с помощью любого редактора. После символа “стрелки” видны ветки, в которых находятся “конфликтующие” изменения:
После “итогового” сохранения изменений можно снова, на этот раз уже успешно, выполнить слияние:
Удаление ветки
Для удаления ветки используйте такую команду:
git branch -d <имя_ветки>
ПРИМЕЧАНИЕ: Вы не сможете удалить ветку, которая является “активной” в данный момент (придется сначала переключиться на другую ветку). Также предупреждение появится, если ветка содержит незафиксированные изменения (этого уже можно избежать с помощью команды git branch -D <имя_ветки>).
Заключение
В этой инструкции мы рассмотрели основные преимущества Git, продемонстрировали основные функции ветвления, также показали как разрешать конфликты в процессе работы.