Git Branch vor Origin: So lösen Sie das Problem

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 man mit einem häufigen Git-Szenario umgeht: wenn Ihr lokaler Branch dem Remote-Repository voraus ist. Diese Situation tritt auf, wenn Sie lokal Commits durchführen, diese aber noch nicht in das Remote-Repository gepusht haben. Am Ende dieses Labs werden Sie verstehen, wie Sie erkennen können, wann Ihr Branch dem Remote-Repository voraus ist, und wie Sie Ihre lokalen und Remote-Repositories richtig synchronisieren können.

Lokale Änderungen vornehmen

In diesem Schritt nehmen Sie Änderungen an Ihrem lokalen Repository vor, die noch nicht in das Remote-Repository gepusht wurden, wodurch das Szenario "ahead of origin" (dem Ursprung voraus) entsteht.

Lokale und Remote-Repositories verstehen

Git arbeitet mit einem verteilten Modell, bei dem jeder Entwickler eine vollständige Kopie des Repositorys auf seinem lokalen Rechner hat. Lokal vorgenommene Änderungen müssen explizit mit dem Remote-Repository synchronisiert werden.

Beginnen wir damit, in unser Projektverzeichnis zu navigieren:

cd ~/project/git-ahead-demo

Überprüfen wir nun den aktuellen Status unseres Repositorys:

git status

Sie sollten eine Ausgabe ähnlich dieser sehen:

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

nothing to commit, working tree clean

Das bedeutet, dass Ihr lokales Repository aktuell mit dem Remote-Repository synchronisiert ist.

Eine neue Datei erstellen

Erstellen wir eine neue Datei in unserem Repository:

echo "This is a new file for our project." > new_file.txt

Nachdem wir die Datei erstellt haben, müssen wir sie zum Staging-Bereich von Git hinzufügen:

git add new_file.txt

Commiten wir nun diese Datei in unser lokales Repository:

git commit -m "Add new_file.txt"

Sie sollten eine Ausgabe sehen, die Ihren Commit bestätigt:

[master 1a2b3c4] Add new_file.txt
 1 file changed, 1 insertion(+)
 create mode 100644 new_file.txt

Branch-Status überprüfen

Nachdem wir einen lokalen Commit durchgeführt haben, überprüfen wir erneut den Status unseres Repositorys:

git status

Dieses Mal sollten Sie 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

Diese Meldung zeigt an, dass Ihr lokaler Branch einen Commit hat, der noch nicht in das Remote-Repository gepusht wurde. Dies ist genau die Situation, die wir erstellen wollten – Ihr Branch ist jetzt "ahead of origin" (dem Ursprung voraus).

Unterschiede zwischen Branches anzeigen

Nachdem Ihr lokaler Branch dem Remote-Branch voraus ist, wollen wir untersuchen, wie man die spezifischen Unterschiede zwischen Ihren lokalen und Remote-Branches anzeigen kann.

Branch-Referenzen verstehen

In Git beziehen Sie sich auf den Remote-Branch mit dem Format origin/branch-name. Der Begriff origin ist der Standardname für das Remote-Repository, und branch-name ist der Name des Branches (in unserem Fall ist es master).

Commit-Unterschiede anzeigen

Um die Commits anzuzeigen, die in Ihrem lokalen Branch, aber nicht im Remote-Branch vorhanden sind, verwenden Sie den folgenden Befehl:

git log origin/master..HEAD

Die Ausgabe zeigt Ihnen die Commit(s) an, die sich in Ihrem lokalen Branch (HEAD) befinden, aber nicht im Remote-Branch (origin/master):

commit 1a2b3c4d... (HEAD -> master)
Author: LabEx User <[email protected]>
Date:   ...

    Add new_file.txt

Dateiunterschiede anzeigen

Um zu sehen, welche Dateien sich zwischen Ihren lokalen und Remote-Branches unterscheiden, verwenden Sie:

git diff --name-status origin/master..HEAD

Die Ausgabe sollte Folgendes anzeigen:

A       new_file.txt

Dies zeigt an, dass new_file.txt in Ihrem lokalen Branch hinzugefügt wurde, aber nicht im Remote-Branch existiert.

Die Differenz-Visualisierung verstehen

Um die tatsächlichen Inhaltsunterschiede zu sehen, können Sie Folgendes verwenden:

git diff origin/master..HEAD

Dies zeigt die spezifischen Änderungen an jeder Datei an:

diff --git a/new_file.txt b/new_file.txt
new file mode 100644
index 0000000..3b2aed8
--- /dev/null
+++ b/new_file.txt
@@ -0,0 +1 @@
+This is a new file for our project.

Diese Befehle helfen Ihnen zu verstehen, welche Änderungen sich genau in Ihrem lokalen Branch befinden, die noch nicht in das Remote-Repository gepusht wurden.

Änderungen auf Remote pushen

Nachdem Sie verstanden haben, welche Änderungen in Ihrem lokalen Branch vorhanden sind, ist es an der Zeit, Ihr lokales Repository mit dem Remote-Repository zu synchronisieren, indem Sie Ihre Änderungen pushen.

Git Push verstehen

Der Befehl git push sendet Ihre lokalen Commits an das Remote-Repository. Wenn Sie pushen, synchronisieren Sie den Remote-Branch mit Ihrem lokalen Branch, wodurch beide Branches identisch werden.

Ihre Änderungen pushen

Um Ihre lokalen Commits in das Remote-Repository zu pushen, verwenden Sie:

git push origin master

Sie sollten eine Ausgabe ähnlich dieser sehen:

Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /home/labex/project/remote-repo.git
   abcd123..1a2b3c4  master -> master

Die Ausgabe zeigt:

  • Git hat die Objekte in Ihrem Commit gezählt und komprimiert
  • Die Änderungen wurden erfolgreich an das Remote-Repository gesendet
  • Die alten und neuen Commit-Hash-Identifikatoren
  • Den Branch, der aktualisiert wurde (master -> master)

Das Pushen verifizieren

Überprüfen wir erneut den Status unseres Repositorys:

git status

Jetzt sollten Sie Folgendes sehen:

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

nothing to commit, working tree clean

Dies bestätigt, dass Ihr lokaler Branch jetzt mit dem Remote-Branch synchronisiert ist. Die Meldung "ahead of origin" ist verschwunden, da beide Branches nun die gleichen Commits enthalten.

Inhalt des Remote-Repositorys verifizieren

Wir können überprüfen, ob unsere Änderungen jetzt im Remote-Repository sind, indem wir das Log des Remote-Branches untersuchen:

git log origin/master -1

Dieser Befehl zeigt den aktuellsten Commit auf dem Remote-Branch, der jetzt unsere neue Datei enthalten sollte:

commit 1a2b3c4d... (HEAD -> master, origin/master)
Author: LabEx User <[email protected]>
Date:   ...

    Add new_file.txt

Beachten Sie, dass sowohl HEAD -> master als auch origin/master jetzt auf denselben Commit zeigen, was bestätigt, dass beide Branches synchronisiert sind.

Erstellen und Auflösen mehrerer Commits im Voraus

In realitätsnahen Szenarien haben Sie möglicherweise mehrere Commits, die Ihrem Remote-Branch voraus sind. Lassen Sie uns diese Situation erstellen und lernen, wie man sie auflöst.

Erstellen mehrerer lokaler Commits

Lassen Sie uns mehrere Änderungen erstellen und committen:

## Create a second file
echo "This is the second file." > second_file.txt
git add second_file.txt
git commit -m "Add second_file.txt"

## Modify the README
echo "### Additional Information" >> README.md
echo "This project demonstrates Git branch synchronization." >> README.md
git add README.md
git commit -m "Update README with additional information"

Überprüfen wir nun unseren Status:

git status

Sie sollten Folgendes sehen:

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

nothing to commit, working tree clean

Anzeigen mehrerer Commit-Unterschiede

Sehen wir uns an, welche Commits wir lokal haben, die sich nicht auf dem Remote-Repository befinden:

git log origin/master..HEAD --oneline

Sie sollten Ihre beiden neuen Commits sehen:

abcd123 Update README with additional information
efgh456 Add second_file.txt

Mehrere Commits pushen

Um alle Ihre lokalen Commits mit dem Remote-Repository zu synchronisieren, verwenden Sie denselben Push-Befehl:

git push origin master

Die Ausgabe zeigt, dass beide Commits gepusht werden:

Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 2 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 574 bytes | 574.00 KiB/s, done.
Total 5 (delta 1), reused 0 (delta 0)
To /home/labex/project/remote-repo.git
   1a2b3c4..abcd123  master -> master

Überprüfen, ob alle Commits gepusht wurden

Überprüfen wir unseren Status erneut:

git status

Sie sollten Folgendes sehen:

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

nothing to commit, working tree clean

Dies bestätigt, dass alle Ihre lokalen Commits erfolgreich in das Remote-Repository gepusht wurden.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie man mit Situationen umgeht, in denen Ihr lokaler Git-Branch dem Remote-Branch voraus ist. Sie haben erfolgreich:

  1. Einen lokalen Commit erstellt, der Ihren Branch dem Remote-Branch vorausgesetzt hat.
  2. Git-Befehle verwendet, um die spezifischen Unterschiede zwischen Ihren lokalen und Remote-Branches anzuzeigen.
  3. Ihre Änderungen gepusht, um Ihre lokalen und Remote-Repositories zu synchronisieren.
  4. Mehrere Commits lokal erstellt und diese alle auf einmal in den Remote-Branch gepusht.

Diese Fähigkeiten sind für den täglichen Git-Workflow unerlässlich, da sie Ihnen helfen, Ihre lokalen und Remote-Repositories synchron zu halten, was für eine effektive Zusammenarbeit in Softwareentwicklungsprojekten von entscheidender Bedeutung ist. Denken Sie daran, dass das regelmäßige Synchronhalten Ihrer Branches hilft, Konflikte zu vermeiden und die Zusammenarbeit reibungsloser zu gestalten.