So prüfen Sie, ob ein Git-Repository ungesendete Commits hat

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 lernen Sie, wie Sie prüfen können, ob Ihr lokales Git-Repository Commits enthält, die noch nicht an ein Remote-Repository gepusht wurden. Wir werden verschiedene Methoden untersuchen, um diese "ungesendeten" Commits zu identifizieren, beginnend mit dem grundlegenden Befehl git status, um zu sehen, ob Ihr lokaler Branch weiter vorne ist als sein Remote-Gegenstück.

Anschließend lernen Sie, wie Sie git log @{u}..HEAD verwenden, um speziell die Commits aufzulisten, die lokal vorhanden sind, aber nicht auf dem Upstream-Branch. Abschließend werden wir kurz darauf eingehen, wie Sie den Status über alle Branches hinweg überprüfen können, um ein umfassendes Verständnis des Zustands Ihres Repositorys zu erhalten. Am Ende dieses Labs werden Sie über die wesentlichen Befehle verfügen, um Ihre lokalen Git-Änderungen effektiv zu verwalten und zu verfolgen, bevor Sie sie an das Remote-Repository pushen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) 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/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560092{{"So prüfen Sie, ob ein Git-Repository ungesendete Commits hat"}} git/status -.-> lab-560092{{"So prüfen Sie, ob ein Git-Repository ungesendete Commits hat"}} git/commit -.-> lab-560092{{"So prüfen Sie, ob ein Git-Repository ungesendete Commits hat"}} git/log -.-> lab-560092{{"So prüfen Sie, ob ein Git-Repository ungesendete Commits hat"}} end

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

In diesem Schritt lernen wir, wie man mithilfe von git status prüft, ob der lokale Branch "weiter vorne" ist als der Remote-Branch. Dies ist ein häufiges Szenario, wenn Sie lokal Commits gemacht haben, diese aber noch nicht an ein Remote-Repository gepusht haben.

Zunächst stellen wir sicher, dass wir uns im 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 später committen werden.

echo "This is a new line for the future." >> message.txt

Dieser Befehl hängt den Text "This is a new line for the future." an die Datei message.txt an, die wir zuvor erstellt haben.

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 to the future"

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

[master a1b2c3d] Add another message to the future
 1 file changed, 1 insertion(+)

Nachdem wir nun lokal einen neuen Commit haben, prüfen wir erneut den Status unseres Repositorys mit git status:

git status

Diesmal wird die Ausgabe 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

Die Zeile "Your branch is ahead of 'origin/master' by 1 commit." sagt uns, dass unser lokaler master-Branch einen Commit hat, der im origin/master-Branch (der die Remote-Version unseres Branches darstellt) nicht vorhanden ist. Dies ist eine sehr häufige Situation, wenn Sie an einem Projekt arbeiten und lokal Änderungen vornehmen, bevor Sie diese mit anderen teilen.

Das Verständnis von git status ist von entscheidender Bedeutung, da es Ihnen einen klaren Überblick über den aktuellen Zustand Ihres Repositorys gibt. Es sagt Ihnen, welche Dateien geändert wurden, welche Änderungen im Staging-Bereich sind und ob Ihr lokaler Branch mit dem Remote-Branch synchronisiert ist. Dies hilft Ihnen, Ihre Arbeit zu verfolgen und sich darauf vorzubereiten, Ihre Änderungen an ein Remote-Repository zu pushen.

Verwenden von git log @{u}..HEAD

Im vorherigen Schritt haben wir gesehen, dass git status uns mitteilt, dass unser lokaler Branch weiter vorne ist als der Remote-Branch. Aber wie können wir sehen, welche Commits weiter vorne sind? Hier kommt der Befehl git log @{u}..HEAD zum Einsatz.

Die Syntax @\{u\} (oder @{upstream}) bezieht sich auf den Upstream-Branch, den Ihr aktueller Branch verfolgt. In unserem Fall, da wir keinen Upstream-Branch explizit festgelegt haben, nimmt Git standardmäßig origin/master an (unter der Annahme, dass origin der Name des Remotes und master der Branch-Name ist). HEAD bezieht sich auf die Spitze Ihres aktuellen lokalen Branches.

Somit bedeutet @{u}..HEAD: "Zeige mir die Commits, die sich auf meinem aktuellen Branch (HEAD), aber nicht auf dem Upstream-Branch (@{u}) befinden."

Lassen Sie uns es in unserem my-time-machine-Verzeichnis ausprobieren:

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

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

    Add another message to the future

Diese Ausgabe zeigt den Commit, den wir im vorherigen Schritt gerade erstellt haben. Dies bestätigt, dass dieser spezifische Commit derjenige ist, der "weiter vorne" als der Remote-Branch ist.

Das Verwenden von git log @{u}..HEAD ist eine leistungsstarke Methode, um genau zu sehen, welche Änderungen Sie an ein Remote-Repository pushen werden. Es hilft Ihnen, Ihre Arbeit zu überprüfen und sicherzustellen, dass Sie nur die beabsichtigten Commits pushen.

Denken Sie daran, dass Sie q drücken können, um die Log-Ansicht zu verlassen.

Mit allen Branches verifizieren

In den vorherigen Schritten haben wir git status verwendet, um festzustellen, dass unser lokaler Branch weiter vorne ist, und git log @{u}..HEAD, um die spezifischen Commits zu sehen, die weiter vorne liegen. Jetzt verwenden wir git log --all --decorate --oneline --graph, um die Commit-Historie aller Branches zu visualisieren. Dies kann uns helfen, die Beziehung zwischen unserem lokalen und dem Remote-Branch zu verstehen.

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

cd ~/project/my-time-machine

Führen Sie nun den folgenden Befehl aus:

git log --all --decorate --oneline --graph

Lassen Sie uns die Optionen aufschlüsseln:

  • --all: Zeigt die Historie aller Branches an.
  • --decorate: Zeigt die Namen von Branches und Tags neben den Commits an, auf die sie verweisen.
  • --oneline: Zeigt jeden Commit in einer einzigen Zeile an.
  • --graph: Zeichnet eine textbasierte grafische Darstellung der Commit-Historie auf der linken Seite der Ausgabe.

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

* a1b2c3d (HEAD -> master) Add another message to the future
* e4f5g6h (origin/master) Send a message to the future

In dieser Ausgabe:

  • Die oberste Zeile zeigt unseren neuesten Commit (a1b2c3d) mit der Nachricht "Add another message to the future". (HEAD -> master) gibt an, dass unser aktuelles HEAD (wo wir derzeit arbeiten) und der lokale master-Branch auf diesen Commit verweisen.
  • Die Zeile darunter zeigt den vorherigen Commit (e4f5g6h) mit der Nachricht "Send a message to the future". (origin/master) gibt an, dass der origin/master-Branch (der Remote-Tracking-Branch) auf diesen Commit verweist.

Das Graphenbild auf der linken Seite (die * und die Linien) zeigt visuell, dass unser lokaler master-Branch einen Commit weiter vorne ist als der origin/master-Branch. Dies bestätigt, was uns git status zuvor mitgeteilt hat.

Dieser Befehl ist unglaublich nützlich, um die Historie Ihres Repositorys zu visualisieren, insbesondere wenn Sie mehrere Branches haben. Er hilft Ihnen zu verstehen, wie Branches auseinandergehen und zusammengeführt werden, und wo sich Ihre lokalen Branches im Verhältnis zu den Remote-Branches befinden.

Drücken Sie q, um die Log-Ansicht zu verlassen.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man prüft, ob ein Git-Repository ungesendete Commits enthält. Wir haben begonnen, indem wir git status verwendet haben, um festzustellen, ob unser lokaler Branch "weiter vorne" ist als der Remote-Branch. Dazu mussten wir in das Projektverzeichnis wechseln, eine neue Datei erstellen und zur Staging-Area hinzufügen sowie die Änderungen committen. Nach dem Committen zeigte das erneute Ausführen von git status deutlich, dass unser lokaler Branch um einen Commit weiter vorne war als der Remote-Branch, was auf das Vorhandensein ungesendeter Änderungen hinwies.

Das Lab hat die praktische Anwendung von git status bei der Identifizierung ungesendeter Commits gezeigt und dessen Wichtigkeit bei der Ermittlung des Synchronisationszustands zwischen lokalen und Remote-Repositories hervorgehoben.