Sie möchten die Option --all
zu git-merge-base
. Aus der Dokumentation:
-a, --all
Output all merge bases for the commits, instead of just one.
Dadurch werden alle Merge-Basen zeigen, die verwendet wird, um einen temporären Baum als rekursive merge Basis zu schaffen.
Betrachten wir zum Beispiel einige Zweige ‚A‘ und ‚B‘, die kreuz und quer waren verschmolzen:
3a4f5a6 -- 973b703 -- a34e5a1 (branch A)
/ \/
7c7bf85 X
\ /\
8f35f30 -- 3fd4180 -- 723181f (branch B)
Es ist klar, dass Zweige A und B zwei gemeinsame Vorfahren haben, die in einem kreuz und quer beteiligt waren Zusammenführen: 3a3f5a6
und 8f35f30
. git-merge-base
wird ein der gemeinsamen Vorfahren als merge Basis wählen, aber die --all
Flag verwendet wird, schließen sowohl:
% git-merge-base A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
% git-merge-base --all A B
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279
8f35f30bfe09513f96cf8aa4df0834ae34e93bae
In dieser Situation, wie Sie beachten, würde git-merge-recursive
die beiden merge Basis verschmelzen, um eine virtuelle zu erstellen Commit, das als der eigentliche gemeinsame Vorgänger für den Dreiwege-Merge-Algorithmus verwendet wird.
Perfekt, ich habe es vermisst, dass in der Docs, ich werde es versuchen. In Ihren Kommentaren scheint es, Sie sagten, 973b703 und 3fd4180 sind die gemeinsamen Vorfahren. Sind das nicht 3a4f5a6 und 8f35f30? – Lee
Hah, ja, verzeih mir. Mein Write-up war falsch, ich konnte offensichtlich die Grafik * oder * die Ausgabe des Tools nicht lesen. Bearbeitet. –
Im Idealfall haben alle Zusammenführungsbasen identische Bäume, und das dazwischen liegende Zusammenführungsprodukt ist mit allen seinen Eingaben identisch. In der Praxis, gelegentlich nicht, wie Sie (OP) gefunden haben! :-) Noch eine Anmerkung, eine Weile zurück habe ich den Code für Merge-Recursive überprüft: Wenn es drei oder mehr Merge-Basen gibt, ist der Prozess tatsächlich auf diesen Basen iterativ. Das heißt, zuerst merge die "all" -Liste, merge dann die ersten beiden zusammen und fügt dann jeden weiteren Eintrag wiederholt in das Merge-Ergebnis ein. – torek