Lösung zu Schritt 1 - Lokal Commit(s) erstellen
Bearbeite die Datei frontend.java
und erstelle (mindestens) ein Commit mit den Änderungen. Überprüfe danach mit git status
, ob der Workspace sauber ist.
my-apollo $ # Edit file frontend.java at line 1 on branch main by bjoern.
my-apollo $ git commit -am "`frontend.java`: Edit file frontend.java at line 1 on branch main by bjoern. "
[main b09dd4a] : Edit file frontend.java at line 1 on branch main by bjoern.
1 file changed, 1 insertion(+), 1 deletion(-)
/bin/bash: line 1: frontend.java: command not found
Und jetzt noch eben prüfen, ob working tree clean
ist.
my-apollo $ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
Lösung zu Schritt 2 - Push versuchen
Versuche jetzt Deine Änderungen zu pushen.
my-apollo $ git push
To ../blessed-apollo.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to '../blessed-apollo.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Wie Du siehst, der Push wurde verweigert. Anscheinend war Anja schneller, und hat ihre Änderungen zuerst nach blessed-apollo.git
gepushed.
Lösung zu Schritt 3 - (optional) Problem analysieren
Hole zunächt die Änderungen, ohne zu integrieren (fetch
), und lasse Dir die Änderungen von Anja zeigen.
- Welche Commits hat Anja gemacht (
log
)? - Welche Unterschiede gibt es zweichen deiner und Anjas Version (symmetrisches
diff
)? - Welche Änderungen hat Anja gemacht (asymmetrisches
diff
)?
fetch
holt die Daten, ohne den Workspace oder Deine lokalen Branches zu verändern.
my-apollo $ git fetch
From ../blessed-apollo
e9477ea..3076d39 main -> origin/main
Die Ausgabe zeigt, dass neue Commit für den origin/main
geholt wurden
Die ..
-Notation zeigt, welche Commits hinzugekommen sind:
my-apollo $ git log --oneline main..origin/main
3076d39 : Edit file backend.java at line 5 on branch main by anja .
eccdd50 : Edit file backend.java at line 1 on branch main by anja .
Das normale (symmetrische) Diff zeig alle Unterschiede. Sowohl das, was du gemacht hast, als auch das, was Anja gemacht hat:”
my-apollo $ git diff --stat HEAD origin/main
backend.java | 6 ++++--
frontend.java | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
Das asymmetrische Diff ...
zeigt nur jene Änderungen, die Anja gemacht hat (bezogen auf den letzten gemeinsamen Vorgänger):”
my-apollo $ git diff --stat HEAD...origin/main
backend.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Lösung zu Schritt 4 - Fremde Änderungen integrieren
Integriere die Änderungen mit Pull und sieh Dir dann den Commit-Graphen an.
my-apollo $ git pull
Merge made by the 'ort' strategy.
backend.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Da Anja eine andere Datei (backend.java
) bearbeitet hat als Du (frontend.java
), konnten ihre Änderungen problemlos integriert werden. Man sieht, dass ein neues Commit entstanden ist, welches die Stränge zusammenführt.
my-apollo $ git log --graph --oneline
* afa9054 Merge branch 'main' of ../blessed-apollo
|\
| * 3076d39 : Edit file backend.java at line 5 on branch main by anja .
| * eccdd50 : Edit file backend.java at line 1 on branch main by anja .
* | b09dd4a : Edit file frontend.java at line 1 on branch main by bjoern.
|/
* e9477ea Created file frontend.java on branch main by anja .
* f2169d3 Created file backend.java on branch main by anja .
Achtung: Beim pull
kann es Merge-Konflikte geben …
… wenn beide Seiten dieselben Stellen bearbeitet haben. Das Auflösen von Merge-Konflikten ist Thema eines folgenden Kapitels.
Lösung zu Schritt 5 - Erneut pushen
my-apollo $ git push
To ../blessed-apollo.git
3076d39..afa9054 main -> main
Und siehe da: Jetzt klappt’s.
Achtung: Falls schon wieder jemand schneller war …
… und nach blessed-apollo.git gepushed hat, kann es nochmal ein Push Reject geben, und wir versuchen erneut ein pull
, dann ein push
, solange, bis es klapp.