od https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging
Zasadniczo spowoduje to fałszywe scalenie. Będzie rejestrować nowy zatwierdzenie scalania z oboma oddziałami jako rodzicami, ale nawet nie spojrzy na gałąź, w której się scalasz. Po prostu zapisze w wyniku scalenia dokładny kod w bieżącej gałęzi.
$ git merge -s ours mundo
Scalenie wykonane przez strategię „naszą”.
$ git diff HEAD HEAD~
Widać, że nie ma różnicy między gałęzią, w której byliśmy, a wynikiem połączenia.
Często może to być przydatne, aby Git pomyślał, że gałąź jest już scalona podczas późniejszego scalania. Załóżmy na przykład, że rozgałęziłeś gałąź wydania i zrobiłeś nad nią trochę pracy, którą w pewnym momencie będziesz chciał z powrotem połączyć z gałęzią master. W międzyczasie niektóre poprawki na masterie muszą zostać przeniesione do twojej gałęzi wydania. Możesz scalić gałąź poprawki błędów z gałęzią wydania, a także scalić naszą gałąź z gałęzią master (nawet jeśli poprawka już istnieje), więc kiedy później ponownie scalisz gałąź wydania, nie będzie żadnych konfliktów z poprawką.
Sytuacja okazała się przydatna, jeśli chcę, aby master odzwierciedlał zmiany w nowej gałęzi tematów. Zauważyłem, że -Xtheirs nie łączą się bez konfliktów w niektórych okolicznościach ... np
$ 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.
W tym przypadku znalazłem rozwiązanie
$ git checkout topicFoo
from topicFoo, pierwsze scalenie w master przy użyciu strategii -s nasza, spowoduje to utworzenie fałszywego zatwierdzenia, które jest stanem topicFoo. $ git merge - nasz mistrz
sprawdź utworzone zatwierdzenie scalania
$ git log
teraz sprawdź gałąź master
$ git checkout master
połącz gałąź tematów z powrotem, ale tym razem skorzystaj ze strategii rekurencyjnej -Xtheirs, teraz zobaczysz gałąź główną ze stanem topicFoo.
$ git merge -X theirs topicFoo