2013-07-17 2 views
15

Некоторое время назад я создал ветку из моей ветки master. Назовем это new_feature. Пока я работал над new_feature, ветка master следовала за ее нормальной эволюцией. Теперь, когда new_feature готов к объединению в master, я вижу некоторые конфликты, все они находятся в файлах, которые полностью не связаны с реальной новой функцией (например, некоторые файлы конфигурации и те, которые были изменены на master). Я собираюсь разрешить конфликты вручную, но мне было интересно, так как это довольно часто случается, как я могу просто объединить ветвь new_feature в master, сохраняя при этом постоянную версию файлов master в случае конфликта?Как выбрать файлы из одной ветки во время слияния?

Я уверен, что это легко и связано с чем-то вроде «сохранить версию», но поскольку это довольно чувствительный предмет, я бы скорее спросил, чем сожалеть.

+1

В документации описывается несколько стратегий слияния, в том числе интересующая вас, подробно. Вы всегда должны быть в состоянии восстановить и повторить попытку, если что-то пойдет не так, так что немного экспериментов не повредит. –

+0

Проверьте этот вопрос: http://stackoverflow.com/questions/528659/git-automatic-conflict-resolution –

+0

Спасибо @CarlNorum, вы имеете в виду рекурсивную стратегию с опцией ours? Я не уверен, чтобы понять, поддерживает ли эта стратегия все дерево как хозяина. – Bastian

ответ

17

Как упоминается в комментарии, в документации имеется несколько стратегий. Вы также можете найти их здесь: http://git-scm.com/docs/git-merge

Вы ищете либо git merge -s recursive -X ours, либо git merge -s recursive -X theirs в зависимости от отрасли, в которой вы находитесь. Будьте осторожны с ними, поскольку вы можете случайно пропустить изменения в ваших файлах из другой ветви, и они будут перезаписаны.

Другой способ, который я предпочитаю из-за большего контроля, составляет git checkout <other-branch> -- <list of files>. Таким образом, я не случайно перезаписываю файл с неправильными изменениями.

+1

Просто, чтобы убедиться, что я хорошо понимаю, в моем случае, если я сделаю «git merge -s recursive -X ours new_feature» от мастера, я получу изменения от new_feature, но конфликтующие файлы останутся такими, какие они есть на главном компьютере? – Bastian

+0

да, это правильно. – Schleis

Смежные вопросы