Я просто хочу использовать все файлы из моей ветви 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