Страницы

Поиск по вопросам

суббота, 6 октября 2018 г.

Как разрешается конфликт изменений при слиянии ветвей?

Диспозиция такая:
Есть две ветки. в каждой из них присутствует файл который редактировался (один и тот же).
При слиянии веток что произойдет с этим файлом?


Ответ

Если кратко: произойдет конфликт слияния (merge conflict) и его нужно будет как-то разрешить.
Для бинарных файлов: только выбрать версию А или Б (или другие, если octomerge).
Бывает, что бинарные файлы Git воспринимает как текстовые и тогда merge их необратимо портит. Это прежде всего относится к файлам office-форматов.
Для текстовых файлов: пара вариантов:
Вручную разрешить конфликты
После merge в файле появятся куски из обеих сливаемых версий, как-то так:
<<<<<<< HEAD содержимое файла из первой ветки ====== содержимое файла из второй ветки >>>>>>> otherbranch
Нужно будет вручную отредактировать конфликтный файл (или файлы), при этом не забывая удалить метки, оставленные Git (>>>>>>> otherbranch). Затем:
git add conflicting-file-name.txt git commit -m'merged A and B'
Выбрать одну из версий файла
Можно явным образом указать: какой файл выбирать. Подходит, только если одна из версий не нужна.
git checkout --ours a.txt git checkout --theirs a.txt git add a.txt git commit -m "added theirs"

Сделал вам тестовый репозиторий, чтобы сразу клонировать и посмотреть, как оно работает.
git clone https://github.com/NickVolynkin/git-merge-test.git cd git-merge-test git merge otherbranch open a.txt
В файле видны отметки, можете с ним теперь проделать вышеописанные действия.
Подробнее написано в книге Pro Git на русском. Ее обязательно нужно прочитать, прежде чем работать со слиянием веток. Фундаментальное понимание процесса ничем не заменить.
Потренироваться с ветвлением и слиянием можно тут: Learn Git Branching

Комментариев нет:

Отправить комментарий