Диспозиция такая:
Есть две ветки. в каждой из них присутствует файл который редактировался (один и тот же).
При слиянии веток что произойдет с этим файлом?
Ответ
Если кратко: произойдет конфликт слияния (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
Комментариев нет:
Отправить комментарий