В git конфликтах слияния, как мне сохранить версию, в которую сливаются?

У меня есть две локальные ветки git на моей машине - ветвь с именем "v2" и ветка "master". Я объединяю v2 в master, пока мастер проверен и головная ветвь.

Я хотел бы объединить ветвь "v2" в ветку "master". Когда я выполняю слияние, возникает ряд конфликтов, которые я должен решать один за другим.

Для каждого конфликта, как я могу сохранить файл ветки "v2" , а не версию "ведущего" файла файла?

Параметры, представленные мне git Tower для этих типов конфликтов:

  • Отметить FILENAME как разрешенное вручную
  • Решить, сохраняя FILENAME
  • Решить, удалив FILENAME
  • Восстановить свою версию FILENAME
  • Открыть в внешнем приложении

По моему мнению, опция "сохранить" файл означала сохранение версии "v2" (которая объединялась) и "удаление" файла означала не добавление версии "v2" (но вместо этого сохранение существующего "master" ). Однако, когда я использовал параметр удаления, он фактически полностью удалил файл из репо.

Как сохранить файл ветвления "v2" , а не "ведущую" ветвь версии файла для этих типов конфликтов?

Ответ 1

Даже если вы используете Git Tower, вы можете перейти к командной строке и использовать

git checkout --theirs file.txt

Вот некоторые документы об этом:

http://gitready.com/advanced/2009/02/25/keep-either-file-in-merge-conflicts.html

Если вы хотите ТОЛЬКО использовать башню Git, завершите слияние как есть, затем проверьте другую версию ветки этого файла. Теперь выполните этап и зафиксируйте с поправкой - если это возможно.

Git был разработан как инструмент командной строки. С любыми другими инструментами, которые я когда-либо использовал, у меня всегда был недостаток в функциональности. Я решил обнять вместо того, чтобы бороться с дизайном Git.

Кроме того, вы можете подключить что-то вроде Beyond Compare и выбрать "внешний инструмент", как указано в вашем вопросе. Там у вас будет возможность выбрать сторону "их".

Ответ 2

Если вы хотите сохранить v2 руки вниз (я хочу, чтобы мастер выглядел точно так же, как 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 здесь.

UPDATE: к сожалению, я не думаю, что git Tower предоставляет способ сделать это еще.: - (