Warum existiert es nicht?
Während ich in " git-Befehl zum Erstellen eines Zweigs wie eines anderen " erwähne, wie simuliert werden soll git merge -s theirs
, ist zu beachten, dass Git 2.15 (Q4 2017) jetzt klarer ist:
Die Dokumentation für ' -X<option>
' für Zusammenführungen wurde irreführend geschrieben, um darauf hinzuweisen, dass " -s theirs
" existiert, was nicht der Fall ist.
Siehe Commit c25d98b (25. September 2017) von Junio C Hamano ( gitster
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 4da3e23 , 28. September 2017)
Zusammenführungsstrategien: Vermeiden Sie, dass " -s theirs
" existiert
Die Beschreibung der -Xours
Zusammenführungsoption enthält eine Anmerkung in Klammern, die den Lesern mitteilt, dass sie sich stark von -s ours
der korrekten unterscheidet. Die Beschreibung -Xtheirs
folgt jedoch nachlässig: "Dies ist das Gegenteil von ours
", was einen falschen Eindruck vermittelt, den die Leser ebenfalls benötigen gewarnt zu werden, dass es sich sehr von dem unterscheidet -s theirs
, was in Wirklichkeit gar nicht existiert.
-Xtheirs
ist eine Strategieoption, die auf eine rekursive Strategie angewendet wird. Dies bedeutet, dass die rekursive Strategie immer noch alles zusammenführt, was sie kann, und nur theirs
im Falle von Konflikten auf die Logik zurückgreift .
Diese Debatte über die Relevanz oder Nicht-Relevanz einer theirs
Fusionsstrategie wurde kürzlich in diesem Thread vom September 2017 zurückgebracht .
Es erkennt ältere (2008) Threads an
Kurz gesagt, die vorherige Diskussion kann zu "Wir wollen nicht" zusammengefasst werden -s theirs
, da dies den falschen Workflow fördert.
Es erwähnt den Alias:
mtheirs = !sh -c 'git merge -s ours --no-commit $1 && git read-tree -m -u $1' -
Jaroslaw Halchenko versucht erneut, sich für diese Strategie einzusetzen, aber Junio C. Hamano fügt hinzu :
Der Grund, warum unsere und ihre nicht symmetrisch sind, ist, dass Sie Sie sind und nicht sie - die Kontrolle und das Eigentum an unserer Geschichte und ihrer Geschichte ist nicht symmetrisch.
Sobald Sie entschieden haben, dass ihre Historie die Hauptlinie ist, möchten Sie Ihre Entwicklungslinie lieber als Nebenzweig behandeln und eine Zusammenführung in diese Richtung vornehmen, dh das erste übergeordnete Element der resultierenden Zusammenführung ist eine Festschreibung für ihre Historie und die zweite Eltern sind die letzten schlechten in Ihrer Geschichte. Sie würden also " checkout their-history && merge -s ours your-history
" verwenden, um die Erstelternschaft vernünftig zu halten.
Und zu diesem Zeitpunkt ist die Verwendung von " -s ours
" keine Problemumgehung mehr, da " -s theirs
" fehlt .
Es ist ein angemessener Teil der gewünschten Semantik, dh aus der Sicht der überlebenden kanonischen Geschichtslinie möchten Sie das, was sie getan hat, beibehalten und das, was die andere Geschichtslinie getan hat, zunichte machen .
Junio fügt hinzu, wie von Mike Beaton kommentiert :
git merge -s ours <their-ref>
effektiv sagt "Mark Commits, die in <their-ref>
ihrem Zweig gemacht wurden, als Commits, die dauerhaft ignoriert werden sollen";
und dies ist wichtig, denn wenn Sie später aus späteren Zuständen ihres Zweigs zusammenführen, werden deren spätere Änderungen übernommen, ohne dass die ignorierten Änderungen jemals übernommen werden .