Слияние веток в Git#
Слияние веток в Git — это перенос изменений с одной ветки на другую. При этом слияние не затрагивает сливаемую ветку, то есть она остаётся в том же состоянии.
Чтобы слить код в основную ветку, выполните следующие шаги:
Перейти к ветке, которая будет принимать изменения main_branch:
git checkout main_branch
Выполнить команду для слияния:
git merge merged_branch
merged_branch — имя сливаемой ветки.
После процедуры слияния появляется общий коммит для объединённых веток. По этому коммиту можно отследить историю каждой ветки.
Если в ветке merged_branch были созданы объекты, которые отсутсвовали в main_branch, то слияние пройдет без конфликтов.
Если в ветке merged_branch были ИЗМЕНЕНЫ объекты, которые имелись в main_branch, то произойдет конфликт.
Решение конфликта слияния#
Git не создает коммит слияния автоматически. ПРоцесс останавливается до тех пор, пока не будет разрешен конфликт.
Для проверки, какие файлы не объединены используется git status:
git status
В конфликтующие файлы Git добавляет специальные маркеры конфликтов для исправления их вручную.
В файле появится раздел, имеющий следующую структуру:
<<<<<<< HEAD:filename
содержимое из основной ветки
=======
содержимое из сливаемой ветки
>>>>>>> merged_branch:filename
Необходимо проверить, что из данного кода нужно для проекта:
Оставить нужный код
Удалить строки: <<<<<<< HEAD:filename, =======, >>>>>>> merged_branch:filename
Выполнить индексацию (add) и зафиксировать (commit):
Практика:#
Выполнить слияние веток master и testing:
Перейти в ветку master:
git checkout master
Выполнить слияние:
git merge testing
При слиянии возникнет конфликт, так как в обоих ветках редактировался файл hello_git.py
Получить перечень конфликтующих файлов:
git status
Открыть для редактирования файл hello_git.py:
и привести к виду:
import os
print('Hello, Git!')
print('Indexing is important!')
# осталось из master
ind = 0
sum = 0
while ind <= 9:
sum += ind
print(sum)
ind += 1
# осталось из testing
s = 'Version Control System'
print(f'{s} - length is {len(s)} characters')
Запустить скрипт, убедиться, что все работает корректно, проиндексировать и выполнить коммит:
Вывести указатели веток и визуализировать историю коммитов:
git log --oneline --decorate --all
git log --oneline --decorate --all --graph