Wie findet man den letzten gemeinsamen Vorfahren zweier Git-Zweige?Finde den letzten gemeinsamen Vorfahren zweier Git-Zweige
Antwort
Sie suchen nach git merge-base
. Verbrauch:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Beachten Sie, dass dies den neuesten gemeinsamen Vorfahren ... der findet Ich glaube, was der Fragesteller will, also +1. Ich erwähne es nur für den Fall, dass jemand hierher kommt, um den * ältesten * gemeinsamen Vorfahren zu finden (wie ich es tat) - siehe dazu auch: http://stackoverflow.com/questions/1527234/finding-a-branch-point -with-git – lindes
Dies ist wahrscheinlich, was er gesucht hat, aber die man-Seite garantiert nicht, dass es das Neueste in Echtzeit oder Anzahl der Commits sein wird: nur dass es einer der besten gemeinsamen Vorfahren sein wird. –
Ich denke, ich werde diesen kleinen Ausschnitt viel verwenden: '$ (git merge-base HEAD Master)'. Zum Beispiel 'git log $ (git merge-base HEAD-Master) .. HEAD' – funroll
Einmal erworben, kann der gemeinsame Vorfahr SHA verwendet werden, beispielsweise die verfügbaren Commits auf der Fernbedienung, um zu sehen, wie so:
#!/bin/bash
git remote update
REMBR=`git show-remote-branch`
REMHEAD=`git rev-parse $REMBR`
MERGEBASE=`git merge-base HEAD $REMBR`
REMURL=`git config remote.origin.url`
git request-pull $MERGEBASE $REMURL $REMHEAD
Dies scheint ziemlich tangential zu dem, was tatsächlich gefragt wurde. –
git diff master...feature
zeigt alle neuen Commits Ihres aktuellen (möglicherweise multi-commit) Feature-Zweiges.
man git-diff
Dokumente, die:
git diff A...B
ist die gleiche wie:
git diff $(git merge-base A B) B
aber die ...
ist einfacher zu tippen und zu erinnern.
Wie erwähnt by Dave, kann der Spezialfall HEAD
entfallen. Also:
git diff master...HEAD
ist die gleiche wie:
git diff master...
, die genug ist, wenn der aktuelle Zweig feature
ist.
Schließlich, erinnern Sie sich, dass Reihenfolge wichtig ist! Doing git diff feature...master
zeigt Änderungen, die auf master
nicht auf feature
sind.
Ich wünschte, mehr Git-Befehle würden diese Syntax unterstützen, aber ich denke nicht, dass sie es tun. Und einige haben sogar eine andere Semantik für ...
: What are the differences between double-dot ".." and triple-dot "..." in Git commit ranges?
Oder einfach 'git diff master ...' im Spezialfall von 'HEAD' differieren – Dave
Mit gitk
können Sie die beiden Zweige sehen grafisch:
gitk branch1 branch2
Und dann ist es einfach, den gemeinsamen Vorfahren in der Geschichte der beiden Zweige zu finden.
Nicht alles kann in jedem Fall visuell gemacht werden. Es gibt Gründe, warum Dinge möglicherweise programmatisch automatisiert werden müssen. – ADTC
Wie in einer vorherigen Antwort erwähnt, git merge-base
Werke:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
aber wenn myfeature
der Stromzweig ist, wie es üblich ist, können Sie die Verwendung --fork-point
verwenden:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Dieses Argument funktioniert nur in neueren Versionen von Git. Siehe auch this answer.
Für vollständige Informationen begehen, betrachten:
$ git log -1 $(git merge-base --fork-point develop)
Ich habe 'git Version 2.14.1.windows.1'. Running 'git merge-base --fork-point branch2' mit einer Verzweigung _ (mit eigenen commits) _ dass ** ich weiß ** hat aus dem aktuellen Zweig gespalten ergibt kein Ergebnis, während' git merge-base branch1 branch2' zeigt korrekt den Verzweigungspunkt. Was könnte das Problem sein? – ADTC
@ADTC Checkout 'branch2' und dann' git merge-base --fork-point branch1'. –
Ja, tat das. Nichts ist wieder aufgetaucht. – ADTC
- 1. Wie findet man den kleinsten gemeinsamen Vorfahren eines Nary-Baumes?
- 2. Wie finde ich den Abstand zwischen Elementen zweier Arrays?
- 3. Tortoise SVN Switch Branch Befehl Fehler - "teilt keine gemeinsamen Vorfahren"
- 4. Auswählen eines Elements mit dem nächsten gemeinsamen Vorfahren
- 5. können zwei Dateien git fusionieren ihre gemeinsamen Vorfahren ignorieren
- 6. Wie erzwinge ich einen gemeinsamen Vorfahren in einem Git-Merge?
- 7. Kopieren einer Reihe von Datensätzen mit Einschränkungen, mit gemeinsamen Vorfahren
- 8. Was sind die praktischen Anwendungen der kleinsten gemeinsamen Vorfahren-Algorithmen?
- 9. Wie finde ich den längsten gemeinsamen Teilstring mit Bäumen?
- 10. Wie finde ich den gemeinsamen Pfad einer Liste von Pfaden?
- 11. JS wie finde ich den größten gemeinsamen Teiler
- 12. Vergleich zweier NSdictionaries und Finde Unterschiede
- 13. Wie erstelle ich den Schnittpunkt zweier Hashes?
- 14. PostgreSQL ltree finde alle Vorfahren eines bestimmten Labels (nicht Pfad)
- 15. Wie finde ich den letzten Positionsparameter in Linux
- 16. Wie finde ich den letzten Index der Zeichenfolge in Perl
- 17. Wie finde ich den letzten Tag des Monats?
- 18. Wie finde ich den Zeitstempel der letzten Sperre?
- 19. Zeigt den Schnittpunkt zweier Ausdrücke
- 20. Möglich, den nächsten positionierten Vorfahren zu umgehen?
- 21. XPath Vorfahren
- 22. Wie finde ich letzten Montag mit momentjs?
- 23. den gemeinsamen Wert über Partition
- 24. Ist es möglich, ein Strategie-Muster für Datenstrukturen ohne gemeinsamen Vorfahren zu verwenden?
- 25. Den Schnittpunkt zweier aktiver Datensatzrelationen erhalten, rails
- 26. Algorithmus für den Vergleich zweier Signale
- 27. Wie erhält man den Schnittpunkt zweier Vektoren?
- 28. Finde Indizes von gemeinsamen Werten in zwei Arrays
- 29. Niedrigste gemeinsame Vorfahren rekursiv in Java
- 30. QML - Adressierung eines Vorfahren
definieren letzte: reale Welt, die Anzahl der Commits, andere Metrik? –
Relevant (kreuzweise Verschmelzungen): http://stackoverflow.com/questions/26370185/how-do-criss-cross-merges-arise-in-git – Jubobs