Link Search Menu Expand Document

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.

Zur Aufgabe

Zum Überblick