Почему его не существует?
Хотя я упоминаю в « git command для создания одной ветви как другую », как имитировать git merge -s theirs
, обратите внимание, что Git 2.15 (Q4 2017) теперь более понятен:
Документация для ' -X<option>
' для слияний была введена в заблуждение, чтобы предположить, что ' -s theirs
' существует, а это не так.
Посмотреть коммит c25d98b (25 сентября 2017 г.) Junio C Hamano ( gitster
) .
(Объединено Junio C Hamano - gitster
- в коммите 4da3e23 , 28 сентября 2017 г.)
стратегии слияния: избегайте намека на то, что-s theirs
" существует
Описание -Xours
опции слияния содержит заключенную в скобки заметку, которая говорит читателям, что она сильно отличается от -s ours
, что является правильным, но описание, -Xtheirs
которое следует за ней небрежно, говорит: «Это противоположность ours
», создавая ложное впечатление, что читатели также нуждаются быть предупрежденным, что это очень отличается от того -s theirs
, чего в действительности даже не существует.
-Xtheirs
является вариантом стратегии применительно к рекурсивным стратегии. Это означает, что рекурсивная стратегия по-прежнему объединит все, что может, и будет использовать theirs
«логику» только в случае конфликтов.
Это дебаты на уместность или нет theirs
стратегии слияния были недавно возвращены в этой теме в сентябре 2017 года .
Это признает старые (2008) темы
Короче говоря, предыдущее обсуждение можно резюмировать как «мы не хотим» -s theirs
, поскольку оно поощряет неправильный рабочий процесс ».
Упоминается псевдоним:
mtheirs = !sh -c 'git merge -s ours --no-commit $1 && git read-tree -m -u $1' -
Ярослав Хальченко пытается отстаивать эту стратегию еще раз, но Хунио С. Хамано добавляет :
Причина, по которой наши и их не являются симметричными, заключается в том, что вы - это вы, а не они - контроль и владение нашей историей и их историей не симметричны.
Как только вы решите, что их история является основной, вы бы предпочли рассматривать свою линию развития как побочную ветвь и выполнять слияние в этом направлении, то есть первый родительский результат получающегося слияния является коммитом в их истории, а второй родитель последний плохой в вашей истории. Так что вы бы в конечном итоге использовать "checkout their-history && merge -s ours your-history
", чтобы сохранить разумность первого родителя.
И в этот момент использование « -s ours
» больше не является обходным решением из-за отсутствия « -s theirs
».
Это правильная часть желаемой семантики, то есть с точки зрения сохранившейся канонической линии истории, вы хотите сохранить то, что она сделала, сводя на нет то, что сделала другая линия истории .
Джунио добавляет, как прокомментировал Майк Битон :
git merge -s ours <their-ref>
фактически говорит: «помечать коммиты, сделанные в <their-ref>
их ветке, как коммиты, которые постоянно игнорируются»;
и это важно, потому что, если вы впоследствии объединитесь с более поздними состояниями их ветви, их более поздние изменения будут внесены без внесенных игнорируемых изменений .