В конфликтах 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 предлагает способ сделать это еще.:-(

Другие вопросы по тегам