Einführung
In diesem Lab lernen Sie, wie man mit einem gängigen Git-Szenario umgeht: wenn Ihr lokaler Branch dem Remote-Repository voraus ist (ahead). Diese Situation tritt ein, wenn Sie lokale Commits erstellen, diese aber noch nicht an das Remote-Repository gepusht haben. Am Ende dieses Labs werden Sie verstehen, wie Sie erkennen, wann Ihr Branch dem Remote voraus ist, und wie Sie Ihre lokalen und Remote-Repositories korrekt synchronisieren.
Lokale Änderungen vornehmen
In diesem Schritt werden Sie Änderungen an Ihrem lokalen Repository vornehmen, die noch nicht an das Remote-Repository gepusht wurden, wodurch das Szenario "ahead of origin" (dem Ursprung voraus) entsteht.
Repository einrichten
Zuerst müssen wir ein Repository einrichten, mit dem wir arbeiten können. Wir verwenden das git-playground-Repository als Ausgangspunkt. Da Sie Push-Berechtigungen benötigen, um dieses Lab abzuschließen, müssen Sie das Repository zuerst forken.
Das Repository forken
- Besuchen Sie https://github.com/labex-labs/git-playground in Ihrem Browser
- Klicken Sie oben rechts auf die Schaltfläche "Fork", um Ihre eigene Kopie des Repositorys zu erstellen
- Sobald Sie geforkt haben, notieren Sie Ihren GitHub-Benutzernamen – Sie werden ihn im nächsten Schritt benötigen
Ihr geforktes Repository klonen
Nun klonen wir Ihr geforktes Repository auf Ihren lokalen Rechner. Ersetzen Sie YOUR_USERNAME durch Ihren tatsächlichen GitHub-Benutzernamen:
cd ~/project
git clone https://github.com/YOUR_USERNAME/git-playground.git
cd git-playground
Nach dem Klonen überprüfen Sie, ob das Remote-Repository korrekt konfiguriert ist:
git remote -v
Sie sollten eine Ausgabe sehen, die Ihr geforktes Repository als origin Remote anzeigt:
origin https://github.com/YOUR_USERNAME/git-playground.git (fetch)
origin https://github.com/YOUR_USERNAME/git-playground.git (push)
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.
Ü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
Dies bedeutet, dass Ihr lokales Repository derzeit 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 die Datei erstellt wurde, müssen wir sie zur Staging Area (Zwischenspeicher) von Git hinzufügen:
git add new_file.txt
Nun committen wir 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
Überprüfung des Branch-Status
Nachdem wir einen lokalen Commit vorgenommen 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 enthält, der noch nicht an das Remote-Repository gepusht wurde. Dies ist genau die Situation, die wir erzeugen wollten – Ihr Branch ist nun "ahead of origin".
Unterschiede der Branches anzeigen
Nachdem Ihr lokaler Branch dem Remote-Branch voraus ist, wollen wir nun untersuchen, wie man die spezifischen Unterschiede zwischen Ihrem lokalen und dem Remote-Branch anzeigt.
Branch-Referenzen verstehen
In Git referenziert man 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 zu sehen, die in Ihrem lokalen Branch existieren, aber nicht im Remote-Branch, verwenden Sie den folgenden Befehl:
git log origin/master..HEAD
Die Ausgabe zeigt Ihnen den/die Commit(s), der/die sich in Ihrem lokalen Branch (HEAD) befinden, aber nicht im Remote-Branch (origin/master):
commit 1a2b3c4d... (HEAD -> master)
Author: LabEx User <labex@example.com>
Date: ...
Add new_file.txt
Datei-Unterschiede 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 deutet darauf hin, dass new_file.txt in Ihrem lokalen Branch hinzugefügt wurde, aber im Remote-Branch nicht existiert.
Die Unterschiedsvisualisierung verstehen
Um die tatsächlichen Inhaltsunterschiede zu sehen, können Sie verwenden:
git diff origin/master..HEAD
Dies zeigt die spezifischen Änderungen an jeder Datei:
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 an das Remote-Repository gepusht wurden.
Änderungen auf Remote pushen
Nachdem Sie verstanden haben, welche Änderungen in Ihrem lokalen Branch vorhanden sind, ist es nun 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 auf das Remote-Repository zu pushen, verwenden Sie:
git push origin master
Sie sollten eine Ausgabe ähnlich der folgenden 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), pack-reused 0
To https://github.com/YOUR_USERNAME/git-playground.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
- Der Branch, der aktualisiert wurde (
master -> master)
Das Push überprüfen
Überprüfen wir nun erneut den Status unseres Repositorys:
git status
Jetzt sollten Sie 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 nun mit dem Remote-Branch synchronisiert ist. Die Meldung "ahead of origin" ist verschwunden, da beide Branches nun dieselben Commits enthalten.
Überprüfung des Remote-Repository-Inhalts
Wir können überprüfen, ob unsere Änderungen nun im Remote-Repository vorhanden sind, indem wir das Log des Remote-Branches untersuchen:
git log origin/master -1
Dieser Befehl zeigt den neuesten Commit auf dem Remote-Branch an, der nun unsere neue Datei enthalten sollte:
commit 1a2b3c4d... (HEAD -> master, origin/master)
Author: LabEx User <labex@example.com>
Date: ...
Add new_file.txt
Beachten Sie, dass sowohl HEAD -> master als auch origin/master nun auf denselben Commit zeigen, was bestätigt, dass beide Branches synchronisiert sind.
Erstellen und Auflösen mehrerer vorauslaufender Commits
In realen Szenarien haben Sie möglicherweise mehrere Commits, die Ihrem Remote-Branch voraus sind. Erstellen wir diese Situation und lernen wir, wie man sie auflöst.
Mehrere lokale Commits erstellen
Erstellen und committen wir mehrere Änderungen:
## 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 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
Unterschiede mehrerer Commits anzeigen
Sehen wir uns an, welche Commits wir lokal haben, die sich nicht auf dem Remote 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), pack-reused 0
To https://github.com/YOUR_USERNAME/git-playground.git
1a2b3c4..abcd123 master -> master
Überprüfen, ob alle Commits gepusht wurden
Überprüfen wir erneut unseren Status:
git status
Sie sollten 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 auf das Remote-Repository gepusht wurden.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie man Situationen handhabt, in denen Ihr lokaler Git-Branch dem Remote-Branch voraus ist. Sie haben erfolgreich:
- Einen lokalen Commit erstellt, der Ihren Branch dem Remote-Branch voraus machte.
- Git-Befehle verwendet, um die spezifischen Unterschiede zwischen Ihrem lokalen und dem Remote-Branch anzuzeigen.
- Ihre Änderungen gepusht, um Ihre lokalen und Remote-Repositories zu synchronisieren.
- Mehrere Commits lokal erstellt und sie alle auf einmal an 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 die regelmäßige Synchronisation Ihrer Branches hilft, Konflikte zu vermeiden und die Zusammenarbeit reibungsloser zu gestalten.



