Ich vermute, Sie sind hier verwirrt, weil es grundsätzlich verwirrend ist. Um die Sache noch schlimmer zu machen, wechselt unser gesamtes Zeug die Rollen (wird rückwärts), wenn Sie eine Rebase durchführen.
Letztlich während ein git merge
, bezieht sich der „unsere“ Zweig mit dem Zweig Sie verschmelzen in :
git checkout merge-into-ours
und der Zweig "ihnen" bezieht sich auf den (einzelnen) Zweig, den Sie zusammenführen:
git merge from-theirs
und hier machen "unsere" und "ihre" einen Sinn, denn obwohl "ihre" wahrscheinlich sowieso deine sind, ist "ihre" nicht die, auf der du warst, als du gelaufen bist git merge
.
Die Verwendung des tatsächlichen Zweignamens mag zwar ziemlich cool sein, fällt jedoch in komplexeren Fällen auseinander. Anstelle der oben genannten Schritte können Sie beispielsweise Folgendes tun:
git checkout ours
git merge 1234567
wo Sie durch rohe Commit-ID zusammenführen. Schlimmer noch, Sie können dies sogar tun:
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
In diesem Fall sind keine Filialnamen beteiligt!
Ich denke, es ist hier wenig hilfreich, aber tatsächlich können Sie in der gitrevisions
Syntax während einer Konfliktzusammenführung auf einen einzelnen Pfad im Index nach Zahlen verweisen
git show :1:README
git show :2:README
git show :3:README
Stufe 1 ist der gemeinsame Vorfahr der Dateien, Stufe 2 ist die Zielverzweigungsversion und Stufe 3 ist die Version, aus der Sie zusammenführen.
Der Grund, warum die Begriffe "unsere" und "ihre" rebase
währenddessen ausgetauscht werden, ist, dass die Rebase durch eine Reihe von Cherry-Picks in einen anonymen Zweig (getrennter HEAD-Modus) funktioniert. Der Zielzweig ist der anonyme Zweig, und der Merge-from-Zweig ist Ihr ursprünglicher Zweig (vor dem Rebase). "--Ours" bedeutet also, dass der anonyme Rebase erstellt wird, während "--theirs" bedeutet, dass "unser Zweig neu basiert". .
Was den Eintrag gatattributes betrifft: Es könnte einen Effekt haben: "unser" bedeutet wirklich "Stufe 2 intern verwenden". Aber wie Sie bemerken, ist es zu diesem Zeitpunkt noch nicht vorhanden, daher sollte es hier keine Auswirkungen haben ... nun, es sei denn, Sie kopieren es in den Arbeitsbaum, bevor Sie beginnen.
Dies gilt übrigens auch für alle Verwendungszwecke von uns und von ihnen, aber einige befinden sich auf der Ebene einer ganzen Datei ( -s ours
für eine Zusammenführungsstrategie; git checkout --ours
während eines Zusammenführungskonflikts) und einige sind Stück für Stück ( -X ours
oder -X theirs
während eines Zusammenführungskonflikts)-s recursive
verschmelzen). Was wahrscheinlich bei keiner Verwirrung hilft.
Ich habe mir jedoch nie einen besseren Namen dafür ausgedacht. Und: siehe VonCs Antwort auf eine andere Frage, in git mergetool
der noch weitere Namen für diese eingeführt werden, die als "lokal" und "fern" bezeichnet werden!