So prüfen Sie, ob ein Git-Branch weiter als der Remote-Branch ist

GitGitBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir lernen, wie Sie prüfen können, ob Ihr lokaler Git-Branch weiter als der entsprechende Remote-Branch ist. Dies ist eine entscheidende Fähigkeit, um den Zustand Ihres Repositorys zu verstehen, bevor Sie Änderungen pushen. Wir werden zwei Hauptmethoden untersuchen: die Verwendung von git status, um den "ahead"-Status anzuzeigen, und die Verwendung von git log mit der Syntax @{u}..HEAD, um die spezifischen Commits anzuzeigen, die weiter sind.

Durch praktische Übungen werden wir das Erstellen lokaler Commits simulieren und dann diese Befehle verwenden, um zu beobachten, wie Git anzeigt, dass unser lokaler Branch vom Remote-Branch abgewichen ist. Abschließend werden wir diese Methoden mit synchronisierten Branches testen, um die erwartete Ausgabe zu sehen, wenn keine Commits weiter sind.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/DataManagementGroup -.-> git/reset("Undo Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560041{{"So prüfen Sie, ob ein Git-Branch weiter als der Remote-Branch ist"}} git/status -.-> lab-560041{{"So prüfen Sie, ob ein Git-Branch weiter als der Remote-Branch ist"}} git/commit -.-> lab-560041{{"So prüfen Sie, ob ein Git-Branch weiter als der Remote-Branch ist"}} git/reset -.-> lab-560041{{"So prüfen Sie, ob ein Git-Branch weiter als der Remote-Branch ist"}} git/log -.-> lab-560041{{"So prüfen Sie, ob ein Git-Branch weiter als der Remote-Branch ist"}} end

Prüfen des Git-Status auf "Ahead"-Status

In diesem Schritt werden wir lernen, wie man den Status unseres Git-Repositorys prüft, insbesondere darauf, wie Git uns mitteilt, ob unser lokaler Branch "weiter" als ein Remote-Branch ist. Dies ist ein häufiges Szenario, wenn Sie lokal Commits gemacht haben, diese aber noch nicht in ein Remote-Repository gepusht haben.

Zunächst stellen wir sicher, dass wir uns in unserem Projektverzeichnis befinden. Öffnen Sie Ihr Terminal und navigieren Sie in das Verzeichnis my-time-machine:

cd ~/project/my-time-machine

Jetzt erstellen wir eine neue Datei und fügen ihr etwas Inhalt hinzu. Wir simulieren damit eine Änderung, die wir schließlich committen werden.

echo "Another message for the future" >> message.txt

Dieser Befehl hängt den Text "Another message for the future" an unsere vorhandene Datei message.txt an.

Als Nächstes stellen wir diese Änderung mit git add in den Staging-Bereich:

git add message.txt

Jetzt erstellen wir einen neuen Commit mit einer Nachricht, die die Änderung beschreibt:

git commit -m "Add another message"

Sie sollten eine Ausgabe ähnlich dieser sehen, die darauf hinweist, dass ein neuer Commit erstellt wurde:

[master 1a2b3c4] Add another message
 1 file changed, 1 insertion(+)

Toll! Wir haben nun einen neuen Commit auf unserem lokalen master-Branch gemacht. Dieser Commit existiert jedoch nur lokal. Wenn wir ein Remote-Repository hätten (z. B. auf GitHub oder GitLab), würde dieser Commit dort noch nicht vorhanden sein.

Lassen Sie uns erneut den Status unseres Repositorys mit git status prüfen:

git status

Diesmal wird die Ausgabe etwas anders aussehen. Sie sollten etwas wie Folgendes sehen:

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Beachten Sie die Zeile Your branch is ahead of 'origin/master' by 1 commit.. Dies ist Gits Weg, uns mitzuteilen, dass unser lokaler master-Branch einen Commit hat, der nicht auf dem origin/master-Branch vorhanden ist (der den master-Branch in einem hypothetischen Remote-Repository namens origin darstellt).

Dieser "Ahead"-Status ist ein wichtiger Indikator dafür, dass Sie lokale Änderungen haben, die in das Remote-Repository gepusht werden müssen, um sie mit anderen zu teilen oder sie remote zu sichern. Das Verständnis dieses Status ist entscheidend für die Zusammenarbeit mit anderen und die Synchronisierung Ihrer lokalen und Remote-Repositories.

Verwenden von git log @{u}..HEAD für "Ahead"-Commits

Im vorherigen Schritt haben wir gesehen, dass git status uns mitteilte, dass unser lokaler Branch "weiter" als der Remote-Tracking-Branch ist. Aber wie können wir sehen, welche Commits weiter sind? Git bietet eine leistungsstarke Möglichkeit, Branches miteinander zu vergleichen, indem man git log verwendet.

Die Syntax @{u}..HEAD ist eine Abkürzung in Git. @{u} bezieht sich auf den Upstream-Branch (den Remote-Tracking-Branch, auf den Ihr aktueller Branch konfiguriert ist, wie origin/master), und HEAD bezieht sich auf die Spitze Ihres aktuellen lokalen Branches. Also bedeutet @{u}..HEAD "zeige mir die Commits, die auf meinem aktuellen Branch (HEAD) aber nicht auf dem Upstream-Branch (@{u}) sind".

Lassen Sie uns diesen Befehl in unserem Terminal ausprobieren. Stellen Sie sicher, dass Sie sich immer noch im Verzeichnis ~/project/my-time-machine befinden:

cd ~/project/my-time-machine
git log @{u}..HEAD

Sie sollten den Log-Eintrag für den Commit sehen, den wir im vorherigen Schritt gemacht haben:

commit 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0 (HEAD -> master, origin/master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Add another message

(Hinweis: Der Commit-Hash und das Datum werden in Ihrer Ausgabe anders sein, aber die Commit-Nachricht sollte die gleiche sein.)

Dieser Befehl ist unglaublich nützlich, um genau zu sehen, welche Änderungen Sie in ein Remote-Repository pushen möchten. Er hilft Ihnen, Ihre Arbeit zu überprüfen und sicherzustellen, dass Sie nur die beabsichtigten Commits pushen.

Die Syntax @{u}..HEAD ist ein spezielles Beispiel für Gits Bereichsnotation für git log. Sie können ähnliche Syntax verwenden, um beliebige zwei Commits oder Branches zu vergleichen. Beispielsweise zeigt branch1..branch2 die Commits auf branch2, die nicht auf branch1 sind.

Das Verständnis, wie man git log mit Bereichsnotation verwendet, gibt Ihnen eine feingliedrige Kontrolle über die Ansicht der Projektgeschichte und den Vergleich verschiedener Zustände Ihres Repositorys.

Drücken Sie q, um die Log-Ansicht zu verlassen und zur Befehlszeile zurückzukehren.

Testen mit synchronisierten Branches

In den vorherigen Schritten haben wir gesehen, was passiert, wenn unser lokaler Branch weiter als der Remote-Tracking-Branch ist. Jetzt wollen wir sehen, was git status und git log @{u}..HEAD anzeigen, wenn unser lokaler Branch mit dem Remote-Tracking-Branch synchronisiert ist.

Da wir in dieser Lab-Umgebung kein echtes Remote-Repository haben, können wir die Synchronisierung simulieren, indem wir den Commit entfernen, den wir gerade gemacht haben. In einem realen Szenario würde die Synchronisierung bedeuten, dass Sie Ihre lokalen Commits in das Remote-Repository gepusht haben.

Wir können git reset verwenden, um unseren lokalen Branch-Zeiger auf den vorherigen Commit zurückzubewegen. Seien Sie vorsichtig mit git reset in realen Projekten, da es Änderungen verwerfen kann! Für dieses Lab ist es sicher, da wir nur einen Zustand simulieren.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-time-machine befinden:

cd ~/project/my-time-machine

Jetzt setzen wir unseren Branch auf den Commit vor dem letzten zurück. Wir können HEAD~1 verwenden, um auf den Commit vor dem aktuellen HEAD zu verweisen.

git reset --hard HEAD~1

Sie sollten eine Ausgabe ähnlich dieser sehen, die darauf hinweist, dass der HEAD zurückbewegt wurde und das Arbeitsverzeichnis aktualisiert wurde:

HEAD is now at a1b2c3d Send a message to the future

(Hinweis: Der Commit-Hash wird mit dem Hash Ihres ersten Commits übereinstimmen.)

Nachdem wir unseren lokalen Branch auf den Zustand des ersten Commits zurückgesetzt haben, lassen wir uns erneut den Status anzeigen:

git status

Diesmal sollte die Ausgabe anzeigen, dass Ihr Branch mit dem Remote-Tracking-Branch aktuell ist:

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Die Nachricht Your branch is up to date with 'origin/master'. sagt uns, dass unser lokaler master-Branch mit dem Remote-Tracking-Branch synchronisiert ist.

Schließlich verwenden wir erneut git log @{u}..HEAD, um zu sehen, ob es irgendwelche "Ahead"-Commits gibt:

git log @{u}..HEAD

Dieser Befehl sollte keine Ausgabe liefern, da es keine Commits auf unserem lokalen Branch (HEAD) gibt, die nicht auch auf dem Upstream-Branch (@{u}) sind.

Dies bestätigt, dass unser lokaler Branch jetzt mit dem Remote-Tracking-Branch synchronisiert ist. Das Verständnis der Ausgabe von git status und die Verwendung von git log @{u}..HEAD sind essentielle Fähigkeiten für die Verwaltung Ihres Git-Workflows und die effektive Zusammenarbeit.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man prüft, ob ein lokaler Git-Branch weiter als der entsprechende Remote-Branch ist. Wir haben begonnen, indem wir einen lokalen Commit gemacht haben und dann git status verwendet haben, um die "Ahead"-Statusmeldung zu beobachten, die darauf hinweist, dass der lokale Branch Commits enthält, die noch nicht auf dem Remote vorhanden sind.

Wir haben auch untersucht, wie man git log @{u}..HEAD verwendet, um speziell die Commits aufzulisten, die weiter als der Remote-Tracking-Branch sind, und so eine detailliertere Ansicht der Unterschiede zu erhalten. Schließlich haben wir das Verhalten mit synchronisierten Branches getestet, um zu bestätigen, dass git status die Branches als aktuell meldet, wenn es keine lokalen Commits gibt, die weiter als der Remote sind.