от https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging
Это в основном сделает поддельное слияние. Он будет записывать новый коммит слияния с обеими ветвями как родителями, но он даже не будет смотреть на ветвь, в которую вы сливаетесь. В результате слияния он просто записывает точный код в вашей текущей ветке.
$ git merge -s ours mundo
Слияние, сделанное по «нашей» стратегии.
$ git diff HEAD HEAD~
Вы можете видеть, что нет разницы между ветвью, в которой мы были, и результатом слияния.
Часто это может быть полезно, чтобы обмануть Git, думая, что ветвь уже объединена при последующем слиянии. Например, допустим, что вы разветвили ветку релиза и выполнили некоторую работу над ней, чтобы в какой-то момент вам захотелось вернуться обратно в основную ветку. Тем временем некоторые исправления на master необходимо перенести в ветку релизов. Вы можете объединить ветку исправления ошибок с веткой выпуска, а также слить нашу ветку с той же веткой в вашу основную ветку (даже если исправление уже есть), поэтому, когда вы позже снова объедините ветку выпуска, не возникнет конфликтов с исправлением ошибки.
Ситуация, которую я нашел полезной, если я хочу, чтобы master отражал изменения в новой ветке темы. Я заметил, что -Xtheirs не сливается без конфликтов в некоторых обстоятельствах ... например
$ git merge -Xtheirs topicFoo
CONFLICT (modify/delete): js/search.js deleted in HEAD and modified in topicFoo. Version topicFoo of js/search.js left in tree.
В этом случае решение, которое я нашел, было
$ git checkout topicFoo
из topicFoo, первое слияние в master с использованием -s нашей стратегии, это создаст поддельный коммит, который является просто состоянием topicFoo. $ git merge - наш мастер
проверить созданный коммит слияния
$ git log
сейчас оформляю мастер ветку
$ git checkout master
объедините ветку темы обратно, но на этот раз используйте рекурсивную стратегию -Xtheirs, теперь вы увидите главную ветку с состоянием topicFoo.
$ git merge -X theirs topicFoo