Git Force Merge - PullRequest
       3

Git Force Merge

0 голосов
/ 23 ноября 2018

Мне интересно, что я должен делать, чтобы принудительно объединить ветку dev с моей веткой master?Использование git merge dev приводит к множеству конфликтов.Однако я не хочу обращаться с ними индивидуально.Вместо этого я просто хочу использовать все файлы из моей ветки dev и объединить их с master.Но это «принудительное слияние» не так просто, как я думал.Может кто-нибудь, пожалуйста, укажите мне правильное направление?

1 Ответ

0 голосов
/ 23 ноября 2018

Я просто хочу использовать все файлы из моей ветви dev

Если вы хотите использовать all файлы из вашей ветви dev - т.е. любыеизменения, сделанные в ветке master, так как разветвленные ветки должны быть отменены - тогда есть несколько способов.

объединить-наши

Вы можете

git checkout dev
git merge -s ours master
git checkout master
git merge dev

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

Это означает, что порядок коммитов будет изменен при коммите слияния, что вы обычно не замечаете, но это можетимеет значение в некоторых случаях (например, если вы используете --first-parent в журналах или что-то).

дерево коммитов

Если порядок родителей имеет значение, вы можете прибегнуть ксантехническая команда commit-tree

git checkout master
git merge $(git commit-tree dev -p master -p dev -m "merging dev over master")

перезапись истории

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

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

Если вы решите, что перезапись истории имеет смысл, то самое простое - простопереместите ветку master так, чтобы она указывала на тот же коммит, что и dev.

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