Почему его не существует?
Хотя я упоминаю в " команде git для создания одной ветви как другой ", как имитировать git merge -s theirs
, учтите, что Git 2.15 (Q4 2017) теперь более понятен:
Документация для '-X<option>
' для слияний вводит в заблуждение
написано, чтобы предположить, что "-s theirs
" существует, а это не так.
См. коммит c25d98b (25 сентября 2017 г.) от Джунио С. Хамано (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
».
Это правильная часть желаемой семантики, то есть с точки зрения сохранившейся линии канонической истории, вы хотите сохранить то, что она сделала, сводя на нет то, что сделала другая строка истории .