В конфликтах git merge, как мне сохранить версию, в которой происходит слияние?
У меня есть две локальные ветви git на моей машине - ветка с именем "v2" и ветка с именем "master". Я объединяю v2 с мастером, пока мастер извлечен и главный филиал.
Я хотел бы объединить ветку "v2" с веткой "master". Когда я выполняю слияние, возникает ряд конфликтов, которые я должен решить один за другим.
Для каждого конфликта, как сохранить файл ветки "v2", а не версию файла "master"?
Опции, представленные мне Git Tower для этих типов конфликтов:
- Отметить FILENAME как разрешенные вручную
- Разрешить, сохраняя FILENAME
- Решить, удалив FILENAME
- Восстановите их версию FILENAME
- Открыть во внешнем приложении
Насколько я понимаю, вариант "сохранить" файл означал сохранение версии "v2" (которая была объединена), а "удаление" файла означало не добавление версии "v2" (но вместо этого сохранение существующей версии "master").). Когда я использовал опцию удаления, он фактически полностью удалил файл из репозитория.
Как сохранить файл ветки "v2", а не версию файла "master" для этих типов конфликтов?
2 ответа
Даже если вы используете Git Tower, вы можете перейти в командную строку и использовать
git checkout --theirs file.txt
Вот несколько документов об этом:
http://gitready.com/advanced/2009/02/25/keep-either-file-in-merge-conflicts.html
Если вы хотите использовать ТОЛЬКО git tower, завершите слияние как есть, а затем проверьте версию этого файла для другой ветви. Теперь подготовьте и внесите изменения, если это возможно.
Git был разработан, чтобы быть инструментом командной строки. Со всеми другими инструментами, которые я когда-либо использовал, у меня всегда был пробел в функциональности. Я решил принять дизайн вместо Git.
Кроме того, вы можете подключить что-то вроде Beyond Compare и выбрать "внешний инструмент", как указано в вашем вопросе. Там у вас будет возможность выбрать "свою" сторону.
Если вы хотите сохранить v2 руками вниз (я хочу, чтобы master выглядел точно так же, как v2), я думаю, что самый простой способ это сделать:
- Оформите ветку, которую хотите объединить
- Слить мастера в ветку с
ours
стратегия - Мастер проверки
- Слить ветку
Это будет выглядеть так:
git checkout v2
git merge -s ours master
git checkout master
git merge v2
Если вы просто хотите, чтобы этот тип разрешения происходил только при конфликтах, то вы можете сделать:
git checkout master
git merge -s recursive -Xtheirs v2
Вы можете прочитать о стратегиях слияния в документации git здесь.
ОБНОВЛЕНИЕ: к сожалению, я не думаю, что Git Tower предлагает способ сделать это еще.:-(