Как git merge их без * автоматического слияния? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть ветки master и develop, которые я всегда хочу принять как источник правды develop, перезаписывая любые изменения в мастере.

Как я могу это сделать? Хотя я бы сделал это

$ git checkout master
$ git checkout -b merge_to_master
$ git merge develop --strategy-option theirs

, но иногда он автоматически объединяет файлы без конфликтов. Это может быть связано с тем, что некоторые разработчики совершают некоторые вещи для освоения, но даже если это так, я хочу игнорировать это, перезаписать их изменения и сохранить все коммиты, которые мы имели в develop.

1 Ответ

1 голос
/ 24 октября 2019

Остерегайтесь того факта, что git merge develop -Xtheirs (аналогично вашему git merge develop --strategy-option theirs) НЕ является способом "принять то, что находится в разработке, как источник истины, перезаписывая любые изменения в мастере"

Это займет«их» (в вашем случае, master) версия для каждого конфликтующего фрагмента , но любое другое (не конфликтующее) изменение будет обрабатываться обычным способом, принимая все от обоих родителей, когда это возможно.

Чтобы объединить, взяв все от одного родителя, сделав результат в точности похожим с точки зрения кода на одного родителя, у вас есть другой вариант, который заключается в использовании -s ours на стороне, которую выхочу сохранить (поскольку, к сожалению, «их» аналога не существует).

Это может выглядеть так

git checkout -b develop-copy develop
git merge -s ours master
git checkout master
git merge develop-copy

На этом этапе master имеет точно такое же дерево develop имеет, и ветви считаются объединенными для всех дальнейших целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...