Wie man prüft, ob ein Git-Branch von seinem Remote-Gegenstück abgewichen 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 lernen Sie, wie Sie prüfen können, ob Ihr lokaler Git-Branch von seinem Remote-Gegenstück abgewichen ist. Dies ist eine grundlegende Fähigkeit für die kollaborative Entwicklung und den Zugang zu den neuesten Projektänderungen.

Wir beginnen damit, Updates aus einem simulierten Remote-Repository abzurufen und git status zu verwenden, um festzustellen, ob Ihr lokaler Branch hinterher ist. Anschließend werden Sie untersuchen, wie Sie git log nutzen können, um die Commits zwischen Ihrem lokalen und Remote-Branch zu vergleichen, und schließlich die Abweichung mit git diff @{u} HEAD überprüfen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") subgraph Lab Skills git/status -.-> lab-560038{{"Wie man prüft, ob ein Git-Branch von seinem Remote-Gegenstück abgewichen ist"}} git/diff -.-> lab-560038{{"Wie man prüft, ob ein Git-Branch von seinem Remote-Gegenstück abgewichen ist"}} git/log -.-> lab-560038{{"Wie man prüft, ob ein Git-Branch von seinem Remote-Gegenstück abgewichen ist"}} git/fetch -.-> lab-560038{{"Wie man prüft, ob ein Git-Branch von seinem Remote-Gegenstück abgewichen ist"}} end

Abrufen und Prüfen des Git-Status auf Abweichungen

In diesem Schritt lernen wir, wie man prüft, ob es Änderungen im Remote-Repository gibt, die lokal noch nicht vorhanden sind. Dies ist von entscheidender Bedeutung, wenn man mit anderen kollaboriert oder an einem Projekt arbeitet, das an anderer Stelle aktualisiert wird.

Zunächst simulieren wir ein Remote-Repository mit einigen Änderungen. In der Realität wäre dies ein Repository, das auf einer Plattform wie GitHub oder GitLab gehostet wird. In diesem Lab verwenden wir ein lokales Verzeichnis als unser "Remote".

Navigieren Sie zurück in Ihr Projektverzeichnis, falls Sie nicht bereits dort sind:

cd ~/project/my-time-machine

Jetzt holen wir die neuesten Änderungen aus dem simulierten Remote ab. Wir verwenden dazu den Befehl git fetch. Dieser Befehl lädt Commits, Dateien und Referenzen (refs) aus einem Remote-Repository in Ihr lokales Repository herunter. Er führt keine Merge-Operationen in Ihrem aktuellen Branch durch.

git fetch origin

Sie sehen möglicherweise keine nennenswerte Ausgabe, wenn es keine neuen Änderungen gibt. git fetch aktualisiert jedoch die Informationen über die Remote-Branches in Ihrem lokalen Repository.

Als Nächstes verwenden wir git status, um zu sehen, ob unser lokaler Branch hinter dem Remote-Branch zurückliegt. Der Befehl git status ist wie ein Fenster in den aktuellen Zustand Ihres Repositorys. Er informiert Sie über gestagete, ungestagete und nicht verfolgte Dateien und gibt auch Informationen über die Beziehung zwischen Ihrem aktuellen Branch und seinem Upstream-Branch.

Führen Sie den Befehl git status aus:

git status

Wenn es Änderungen im Remote gab, die Sie gerade abgerufen haben, würde die Ausgabe von git status anzeigen, dass Ihr lokaler Branch hinter dem Remote-Branch zurückliegt. Es könnte so aussehen:

On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

Diese Nachricht sagt Ihnen, dass Ihr lokaler master-Branch einen Commit hinter dem origin/master-Branch (der Remote-Version des Master-Branches) zurückliegt. Sie wird auch vorschlagen, git pull zu verwenden, um Ihren lokalen Branch zu aktualisieren, was wir in einem späteren Lab behandeln werden.

Das Verständnis der Ausgabe von git status nach dem Abrufen ist wichtig, da es Ihnen mitteilt, ob es neue Änderungen aus dem Remote-Repository gibt, bevor Sie entscheiden, diese in Ihre lokale Arbeit zu integrieren. Dies hilft, potenzielle Konflikte zu vermeiden und hält Sie über den Fortschritt des Projekts informiert.

Verwenden von git log zum Vergleichen von Commits

Im vorherigen Schritt haben wir git status verwendet, um zu prüfen, ob unser lokaler Branch hinter dem Remote-Branch zurückliegt. Jetzt verwenden wir git log, um die tatsächlichen Commits anzuzeigen, die sich auf dem Remote-Branch, aber nicht auf unserem lokalen Branch befinden.

Der Befehl git log ist äußerst vielseitig. Er ermöglicht es Ihnen, die Commit-Historie auf viele verschiedene Arten anzuzeigen. Um unseren lokalen Branch (HEAD) mit dem Remote-Tracking-Branch (origin/master) zu vergleichen, können wir die folgende Syntax verwenden:

git log HEAD..origin/master

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

cd ~/project/my-time-machine

Jetzt führen Sie den git log-Befehl aus, um die Branches zu vergleichen:

git log HEAD..origin/master

Wenn es Commits auf origin/master gibt, die sich nicht auf Ihrem lokalen HEAD (das derzeit auf Ihren lokalen master-Branch zeigt) befinden, wird dieser Befehl diese Commits auflisten. Die Ausgabe zeigt die Commit-Details, einschließlich des Commit-Hashes, des Autors, des Datums und der Commit-Nachricht, für jeden Commit, der in origin/master existiert, aber nicht in Ihrem aktuellen Branch.

Beispielsweise könnte die Ausgabe wie folgt aussehen, wenn es einen neuen Commit auf dem Remote gibt:

commit abcdef1234567890abcdef1234567890abcdef (origin/master)
Author: Another User <[email protected]>
Date:   Tue Aug 8 10:00:00 2023 +0000

    Add a new feature

Diese Ausgabe zeigt deutlich den Commit, der auf dem Remote, aber nicht lokal vorhanden ist. Die Syntax HEAD..origin/master teilt Git mit, Commits anzuzeigen, die von origin/master erreichbar, aber nicht von HEAD sind.

Das Verwenden von git log auf diese Weise ist ein leistungsstarkes Werkzeug, um die Unterschiede zwischen Branches zu verstehen und genau zu sehen, welche Änderungen Sie erhalten würden, wenn Sie Ihren lokalen Branch aktualisieren würden. Es liefert mehr Details als git status über die spezifischen Commits, die die Abweichung verursachen.

Denken Sie daran, q zu drücken, um die Log-Ansicht zu verlassen, wenn sie in einem Pager geöffnet wird.

Überprüfung mit git diff @{u} HEAD

In den vorherigen Schritten haben wir git status verwendet, um zu prüfen, ob unser lokaler Branch hinter dem Remote-Branch zurückliegt, und git log, um die unterschiedlichen Commits anzuzeigen. Jetzt verwenden wir git diff, um die tatsächlichen Code-Änderungen zu sehen, die durch diese Commits auf dem Remote-Branch im Vergleich zu unserem lokalen Branch eingeführt wurden.

Der Befehl git diff zeigt die Unterschiede zwischen zwei Punkten in Ihrer Git-Historie an. Wir können ihn verwenden, um unseren aktuellen lokalen Branch (HEAD) mit seinem Upstream-Branch zu vergleichen. Der Upstream-Branch ist der Branch im Remote-Repository, auf den Ihr lokaler Branch verweist. In unserem Fall ist der Upstream-Branch für master origin/master. Git bietet eine praktische Abkürzung für den Upstream-Branch: @{u} oder @{upstream}.

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

cd ~/project/my-time-machine

Jetzt führen Sie den git diff-Befehl aus, um die Unterschiede zwischen Ihrem lokalen Branch und seinem Upstream-Branch zu sehen:

git diff @{u} HEAD

Dieser Befehl zeigt Ihnen die zeilenweisen Unterschiede zwischen den Dateien in Ihrem aktuellen Commit (HEAD) und den Dateien im neuesten Commit auf dem Upstream-Branch (@{u}).

Wenn es Änderungen auf dem Remote gibt, die Sie noch nicht geholt haben, zeigt die Ausgabe diese Unterschiede an. Beispielsweise könnte die Ausgabe wie folgt aussehen, wenn eine Zeile in message.txt auf dem Remote hinzugefügt wurde:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+This is a new line from the remote.

Das +-Zeichen zeigt Zeilen an, die im Upstream-Branch (@{u}) vorhanden, aber nicht in Ihrem lokalen Branch (HEAD) sind.

Das Verwenden von git diff @{u} HEAD ist eine leistungsstarke Möglichkeit, die Änderungen auf dem Remote zu previewen, bevor Sie sie in Ihren lokalen Branch mergen. Es ermöglicht Ihnen, die genauen Modifikationen zu verstehen, die vorgenommen wurden, was sehr hilfreich für Code-Reviews oder einfach, um über die Entwicklung des Projekts informiert zu bleiben, ist.

Drücken Sie q, um die Diff-Ansicht zu verlassen, wenn sie in einem Pager geöffnet wird.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man prüft, ob ein lokaler Git-Branch von seinem Remote-Gegenstück abgewichen ist. Wir haben begonnen, indem wir ein Remote-Repository simuliert und git fetch verwendet haben, um die neuesten Änderungen abzurufen, ohne sie zu mergen. Anschließend haben wir git status genutzt, um schnell festzustellen, ob unser lokaler Branch hinter dem Remote-Branch zurücklag, was durch Nachrichten wie "Your branch is behind 'origin/master' by X commit" angezeigt wird.

Nach der ersten Prüfung mit git status haben wir detailliertere Methoden zum Vergleichen von Branches untersucht. Wir haben gelernt, wie man git log mit verschiedenen Optionen verwendet, um die Commit-Historie zu visualisieren und die Unterschiede zwischen dem lokalen und dem Remote-Branch zu identifizieren. Schließlich haben wir die Nützlichkeit von git diff @{u} HEAD für einen genauen Vergleich der Änderungen zwischen dem Upstream-Branch und dem aktuellen HEAD entdeckt, was einen klaren Überblick über die Abweichung bietet.