Übung - Integration von Änderungen
Wenn mehrere Entwickler unabhängig am selben Projekt arbeiten, müssen deren Änderungen von Zeit zu Zeit integriert werden. Dies nennt man Merging.
Die Integration kann in Git mit den Befehlen pull
, merge
und rebase
durchgeführt werden.
Dabei kommt es immer mal wieder zu Merge-Konflikten.
In dieser Übung zeigen wir die Integration per pull
, weil dies sehr typisch für das Arbeiten mit Git ist.
Die Zusammenführung und der Umgang mit Konflikten funktioniert aber bei merge
und rebase
ganz ähnlich..
Infos
git pull
integriert den lokalen Branch mit seinem “upstream” Gegenstück, hier:main
undorigin/main
Tipps
git config --global merge.conflictStyle diff3
verbessert die Darstellung bei Konflikten.git pull
holt und integriert Änderungen Äquivalent zugit fetch
+git merge
)git log --graph
zeigt den Commit-Graphengit diff main origin/main
zeigt die Änderungen der Anderengit log main..origin/main
zeigt die Commits der AnderenHEAD^1
undHEAD^2
bezeichnen den ersten bzw. zweiten Vorgänger, des aktuellenHEAD
-Commits.git diff HEAD^1...HEAD^2
zeigt die “fremden” Änderungengit log HEAD^1..HEAD^2
zeigt die “fremden” Commits- Nach einem Merge-Konflikt:
- Konfliktdateien bearbeiten
- dann
git add
nicht vergessen - Den Merge mit
git commit
abschließen
Ausgangssituation
Ihre Kollegin Anja hat die Arbeit an einem Projekt begonnen. Nun kommen Sie hinzu und übernehmen Aufgaben. Anja hat aber parallel ebenfalls weiter gearbeitet. Integrieren Sie die neuen Änderungen von Anja.
$ cd fast-forward
Schritt 1 - Fast-Forward beim Pull
Starte im Verzeichnis git-uebungen/aufgaben/zusammenarbeit-integration-von-aenderungen/fast-forward
.
Im einfachste Fall haben wir selber gar nichts gemacht, und wollen nur die Änderungen von Anja übernehmen.
Führe ein Pull durch.
Lasse Dir Status und den Commit-Graphen zeigen.
fast-forward $ cd ..
$ cd no-ff
Schritt 2 - Merge erzwingen beim Pull
Starte im Verzeichnis git-uebungen/aufgaben/zusammenarbeit-integration-von-aenderungen/no-ff
.
Auch dieses haben wir nichtnichts gemacht, und wollen nur die Änderungen von Anja übernehmen.
Führe ein Pull mit --no-ff
durch.
Lasse Dir Status und den Commit-Graphen zeigen.
no-ff $ cd ..
$ cd changes-in-different-files
Schritt 3 - Integration bei Änderungen in verschiedenen Dateien
Starte im Verzeichnis git-uebungen/aufgaben/zusammenarbeit-integration-von-aenderungen/changes-in-different-files
.
- Bearbeite die Datei
README.md
.- Erstelle ein Commit dazu.
- Prüfe mit
git show
, ob das Commit OK ist.
- Versuche ein Push
- Dies wird scheitern, denn Deine Kollegin Bea hat die in der Zwischenzeit die Datei
average.kts
bearbeitet und gepushed.
- Dies wird scheitern, denn Deine Kollegin Bea hat die in der Zwischenzeit die Datei
- Integriere mit Pull
- Untersuche das Ergebnis, z. B.
- den Commit-Graphen an
- die Änderungen, die Anja gemacht hat
- die Commits, die Anja gemacht hat
changes-in-different-files $ cd ..
$ cd changes-in-same-files
Schritt 4 - Integration bei Änderungen in derselben Datei
Starte im Verzeichnis git-uebungen/aufgaben/zusammenarbeit-integration-von-aenderungen/changes-in-same-files
.
In diesem Fall bearbeiten wir dieselbe Datei, die auch Anja bearbeitet hat. Es wird zu einem Konflikt kommen, den wir aulösen müssen.
- Wir haben schon eine Änderung, die zu einem Konflikt führt, vorbereitet und committed. Untersuche diese mit
git show
- Führe ein Pull durch.
- Lasse Dir den Status zeigen und löse den Konflikt.
changes-in-same-files $ cd ..