Wie git man alle Änderungen seit der Verzweigung vom Master?

Lesezeit: 4 Minuten

Benutzer-Avatar
Michael Durrant

Ich habe mehrere Commits auf meinem Zweig vorgenommen und jetzt sollte ich die Änderungen sehen, seit ich vom Master gezweigt habe. Allerdings nicht der aktuelle Master, da jetzt andere Zweige zusammengeführt wurden, da ich ursprünglich davon abgezweigt habe.

Ähnlich wie Alle Commits in einem Git-Zweig seit dem ursprünglichen Verzweigungspunkt vom Master anzeigen, aber hier geht es um das Protokoll.

Ich habe es versucht

git diff  --boundary master..

aber ich sehe noch viel mehr Veränderungen als nur meine.

BEARBEITEN:
Ich hoffe wirklich auf einen Weg, der keine Kenntnis von SHAs oder der Anzahl der durchgeführten Commits erfordert. Wenn ich sie nicht brauche, kann ich sie einfacher und problemloser automatisieren und lehren und automatisieren und aliasieren.

git diff my_branch_name...master

scheint nahe zu sein, ist aber nicht korrekt.

  • Bei Ihrer Bearbeitung möchten Sie von der Zusammenführungsbasis abweichen dein Zweigspitze, die ist master...my_branch_namenicht my_branch_name...master.

    – Torek

    15. Dezember 2015 um 1:27 Uhr

  • Du hast es verstanden @torek, bitte poste diese Antwort

    – Michael Durrant

    15. Dezember 2015 um 1:30 Uhr


Benutzer-Avatar
Torek

Wie Jonathan Brink bereits angemerkt hat, klingt es so, als wollten Sie die Version, die unter dem Merge-Base-Commit gespeichert ist, mit der Version an der Spitze Ihres eigenen Zweigs vergleichen.

Verwenden git merge-base --fork-point ist normalerweise übertrieben (und ist in älteren Git-Versionen vor Git 1.9 nicht verfügbar). Es behandelt Fälle, in denen der andere Zweig selbst rebasiert wurde. Wenn dies nicht der Fall ist, können Sie bei der einfacheren Drei-Punkte-Syntax von bleiben gitrevisionen:

git diff master...my_branch_name

was (wie Sie in einem Kommentar bemerkt haben) auch mit beiden geschrieben werden kann HEAD oder einfach die leere Zeichenfolge am Ende:

git diff master...

Wenn Sie drei Punkte verwenden, git diff findet die1 Merge-Base zwischen den Commit-SHA-1s der linken und rechten Seite (wie aus den Namen erhalten oder standardmäßig auf HEAD) und ersetzt das durch den linken SHA-1. Das rechte SHA-1 (wie aus dem Namen herausgelöst) bleibt erhalten.

Beachten Sie, dass sich dies von der Zwei-Punkte-Syntax unterscheidet, und das git diff übernimmt beide Syntaxen (Syntaxen? Nein, Syntax), so dass keines von beiden seine üblichere gitrevisions-Bedeutung hat.


1Wenn es mehr als eine Zusammenführungsbasis gibt, wählt es einfach eine davon aus. Ein tatsächliches git merge wird (wenn Sie die standardmäßige “rekursive” Strategie verwenden) zwei “beste” Merge-Basen zusammenführen, um eine “virtuelle Merge-Basis” zu erhalten, und diese dann verwenden, um sie mit Ihrer aktuellen zu verschmelzen HEAD verpflichten. Dieser Fall ist allerdings ziemlich selten.

  • Würde dies nicht festgeschriebene Änderungen auf dem anzeigen my_branch_name auch?

    – Alper

    23. Juli 2021 um 9:28 Uhr

  • @alper: Nicht festgeschriebene Änderungen sind nicht in Git. Wenn Git zwei Commits vergleicht sind in Git können sie daher nicht anzeigen. Sie können Git einen Commit damit vergleichen lassen ist in Git, gegen einen anderen Satz von Dateien, die ist nicht in Git; Dadurch wird angezeigt, was sich zwischen den festgeschriebenen Dateien und den nicht festgeschriebenen, nicht in Git befindlichen Dateien unterscheidet.

    – Torek

    23. Juli 2021 um 9:30 Uhr

  • Ich werde dies wiederholen, denn es ist zentral zur Verwendung von Git: Nicht festgeschriebene Dateien befinden sich nicht in Git und sind daher nicht an irgendein Zweig.

    – Torek

    23. Juli 2021 um 9:31 Uhr

Benutzer-Avatar
Jonathan.Brink

Verwenden Merge-Basis um das Sha zu bestimmen, an dem die Gabelung aufgetreten ist, und übergeben Sie es an diff:

git diff `git merge-base --fork-point master`

–fork-point
Finden Sie den Punkt, an dem eine Verzweigung (oder ein beliebiger Verlauf, der zu führt) von einer anderen Verzweigung (oder einer beliebigen Referenz) gegabelt wurde. Dies sucht nicht nur nach dem gemeinsamen Vorfahren der beiden Commits, sondern berücksichtigt auch das Reflog von , um zu sehen, ob der Verlauf, der zu führt, von einer früheren Inkarnation des Zweigs abgespalten wurde (siehe Diskussion zu dieser Modus unten).

Sie könnten dies in einem Alias ​​wie diesem zusammenfassen:

git config --global alias.sincemaster '!git diff `git merge-base --fork-point master`'

  • Dies führte zu keiner Ausgabe

    – Michael Durrant

    15. Dezember 2015 um 1:27 Uhr

  • Sind Sie sicher, dass die Spitze Ihres lokalen Themenzweigs für den Meister erreichbar ist? (keine Rebases)

    – Jonathan. Brink

    15. Dezember 2015 um 1:30 Uhr

Wenn Sie den sha-Wert des Commits kennen, bei dem die beiden Projekte auseinandergegangen sind, können Sie einfach Folgendes ausführen:

git diff <sha>

1098720cookie-checkWie git man alle Änderungen seit der Verzweigung vom Master?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy