#10 Git - Учимся мержить ветки

Git. Система контроля версий

В этом видеоуроке мы научимся мержить (мержить, merge - осуществлять слияние) ветки в Git.

На текущий момент у нас есть две ветки (master и new_f) в которых имеются различные модификации кода.
Наша цель - перенести изменения из ветки new_f в ветку master. То есть слить их, смержить.
Для этого нам надо находиться в ветке new_f. Так как это побочная ветка и проще сначала получить в нее изменения из master, протестировать и затем залить в master. Тем самым мы не затронем главную ветку и все конфликты решим в ветке new_f. А ветка master получит изменения быстро и без конфликтов (помним что это главная ветка проекта и с ней могут работать другие разработчики, по этому конфликтные ситуации лучше свести к минимуму).

Переходим в ветку new_f

git checkout new_f

В данной ситуации мы знаем заранее что нас ждет конфликт при слиянии. И сейчас мы позаботимся о том чтобы разрешить конфликт наиболее простым способом и после этого начнем мержить.

Укажем Git-у с помощью какой утилиты будем осуществлять слияние веток и разрешение конфликтов:

git config --global merge.tool kdiff3

Утилита kdiff3. Тем кто проходил мой курс по Mercurial Hg эта утилита будет знакома.
Далее с помощью команды merge запускаем операцию слияния веток:

git merge master

После команды merge указываем с какой веткой надо осуществить слияние.
После запуска мы видим что у нас имеет место конфликт изменений (как вы помните из прошлого видео - мы и в ветке new_f и в ветке master модифицировали один и тот же файл и изменения были на одной и той же строке. По этому kdiff не может принять автоматическое решение какая модификация верная и предоставляет это сделать нам).

Git - конфликт

 

Скажем Гит-у запустить утилиту для мержа которая у нас прописана в конфиге.

git mergetool

Если у вас в системе не был установлен kdiff3, либо он установлен но не прописаны системные переменные, то мы получим ошибку:

git - не установлен kdiff

 

Установим kdiff3 - http://kdiff3.sourceforge.net/
Процесс установки не сложен, по этому текстом описывать не буду - смотрим в видео.
После успешной установки kdiff3 выполним команду:

git config --global mergetool.kdiff3cmd '"D:\\Program Files\\KDiff3\\kdiff3" $BASE $LOCAL $REMOTE -o $MERGED'

 

Посмотрим что у нас попало в файл настроек:

 

После того как мы настроили утилиту для слияния kdiff3, можно приступать к самому слиянию веток в Git.
Выполняем команду:

git mergetool

После выполнения команды у нас запускается kdiff3 в котором мы можем разрешить конфликт и сохранить те изменения которые нам необходимы.

Главное окно kdiff имеет 4 окна с вариантами кода. Смотрим слева на право и с верху в низ.
Первое окно - общий предок конфликтного файла (что было до того как появились первые изменения). В данном случае index.php
Второе окно - изменения которые у нас находятся в локальной ветке. В нашим случае ветка new_f.
Третье окно - изменения в ветке которую мы принимаем. В нашем случае это ветка master.
Четвертое окно - результирующий файл - что мы получим в результате слияния.

Далее и более подробно смотрим в видео.
 

Добавить отзыв (пожелание, комментарий)