В 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 предоставляет способ сделать это еще.: - (