Auf der Manpage zu git-merge gibt es eine Reihe von Zusammenführungsstrategien, die Sie verwenden können.
Auflösen - Dies kann nur zwei Köpfe (dh den aktuellen Zweig und einen anderen Zweig, aus dem Sie gezogen haben) mithilfe des 3-Wege-Zusammenführungsalgorithmus auflösen. Es versucht, kreuz und quer verlaufende Mehrdeutigkeiten sorgfältig zu erkennen und gilt allgemein als sicher und schnell.
rekursiv - Dies kann nur zwei Köpfe mithilfe des 3-Wege-Zusammenführungsalgorithmus auflösen. Wenn es mehr als einen gemeinsamen Vorfahren gibt, der für die 3-Wege-Zusammenführung verwendet werden kann, wird ein zusammengeführter Baum der gemeinsamen Vorfahren erstellt und dieser als Referenzbaum für die 3-Wege-Zusammenführung verwendet. Es wurde berichtet, dass dies zu weniger Zusammenführungskonflikten führt, ohne dass es zu Fehlzusammenführungen durch Tests kommt, die mit tatsächlichen Zusammenführungs-Commits aus dem Entwicklungsverlauf des Linux 2.6-Kernels durchgeführt wurden. Darüber hinaus können Zusammenführungen mit Umbenennungen erkannt und verarbeitet werden. Dies ist die Standard-Zusammenführungsstrategie beim Ziehen oder Zusammenführen eines Zweigs.
octopus - Hiermit werden mehr als zwei Köpfe gelöst, es wird jedoch keine komplexe Zusammenführung durchgeführt, für die eine manuelle Auflösung erforderlich ist. Es soll in erster Linie zum Bündeln von Themenzweigköpfen verwendet werden. Dies ist die Standard-Zusammenführungsstrategie, wenn mehr als ein Zweig gezogen oder zusammengeführt wird.
Unsere - Dies löst eine beliebige Anzahl von Köpfen auf, aber das Ergebnis der Zusammenführung ist immer der aktuelle Zweigkopf. Es soll verwendet werden, um die alte Entwicklungsgeschichte der Seitenzweige zu ersetzen.
Teilbaum - Dies ist eine modifizierte rekursive Strategie. Wenn beim Zusammenführen der Bäume A und B B einem Teilbaum von A entspricht, wird B zuerst an die Baumstruktur von A angepasst, anstatt die Bäume auf derselben Ebene zu lesen. Diese Anpassung wird auch am gemeinsamen Ahnenbaum vorgenommen.
Wann sollte ich etwas anderes als die Standardeinstellung angeben? Für welche Szenarien ist jedes am besten geeignet?
git merge A B ...
).-X ours
ist fantastisch, hat mir nur eine Stunde Arbeit erspart.Tatsächlich sind die einzigen zwei Strategien, die Sie wählen möchten, unsere, wenn Sie Änderungen, die durch die Verzweigung vorgenommen wurden, aufgeben möchten, aber die Verzweigung im Verlauf behalten möchten, und Teilbaum, wenn Sie ein unabhängiges Projekt in das Unterverzeichnis des Superprojekts zusammenführen (wie 'git-gui' in '). Git 'Repository).
Octopus Merge wird automatisch verwendet, wenn mehr als zwei Zweige zusammengeführt werden. Die Lösung erfolgt hier hauptsächlich aus historischen Gründen und wenn Sie von rekursiven Eckfällen für Zusammenführungsstrategien betroffen sind.
quelle
theirs
Zusammenführungsstrategie (das heißt--strategy=theirs
), aber es gibt einetheirs
Option für die Standard-recursive
Zusammenführungsstrategie (das heißt--strategy=recursive --strategy-option=theirs
oder nur-Xtheirs
).Zusammenführungsstrategie "Auflösen" und "Rekursiv"
Rekursiv ist die aktuelle Standardstrategie mit zwei Köpfen, aber nach einigem Suchen habe ich endlich einige Informationen über die Zusammenführungsstrategie "Auflösen" gefunden.
Entnommen aus O'Reillys Buch Versionskontrolle mit Git ( Amazon ) (umschrieben):
Ich habe erfolgreich Bäume mit "Auflösung" zusammengeführt, die mit der standardmäßigen rekursiven Strategie fehlgeschlagen sind. Ich habe
fatal: git write-tree failed to write a tree
Fehler bekommen und dank dieses Blogposts ( Spiegel ) habe ich "-s lösen" versucht, was funktioniert hat. Ich bin mir immer noch nicht ganz sicher, warum ... aber ich denke, das lag daran, dass ich in beiden Bäumen doppelte Änderungen vorgenommen habe und sie ordnungsgemäß "übersprungen" habe.quelle
Da die obigen Antworten nicht alle Strategiedetails anzeigen. Zum Beispiel fehlt einig Antwort Details über die Import -
resolve
Option und die ,recursive
die viele Unter Optionen haben wieours
,theirs
,patience
,renormalize
etc.Daher würde ich empfehlen, die offizielle
git
Dokumentation zu besuchen, in der alle möglichen Funktionen erläutert werden:https://git-scm.com/docs/merge-strategies
quelle