Lab 14: Rebase (Terminal)¶
Beim Mergen entsteht ein Merge-Commit, der die Zusammenführung dokumentiert. Das ist oft gewünscht, kann bei vielen kleinen Branches aber zu einer unübersichtlichen Historie mit vielen Verzweigungen führen.
Eine Alternative ist git rebase. Beim Rebase werden die Commits eines Branches
auf die Spitze eines anderen Branches aufgesetzt, als wären sie dort
entstanden. Das Ergebnis ist eine lineare, aufgeräumte Historie ohne
Merge-Commits.
Vorher: Nachher:
C - D feature C' - D' feature
/ /
A - B - E master A - B - E master
Beim Rebase werden die Commits C und D neu erstellt (als C' und
D') - sie bekommen neue Hashes, weil sie jetzt auf E statt auf B aufbauen.
Wichtig: Wie bei
git resetgilt: Rebase verändert die Historie. Verwende es nur für lokale Commits, die noch nicht gepusht wurden.
Vorbereitung¶
Öffne das Terminal im Verzeichnis labs/14-rebase-branch/exercise.
Aufgaben¶
Ausgangszustand¶
- Welche Branches existieren? (
git branch) - Schau dir die Historie auf
masteran:git log --oneline --graph --all - Wechsle auf den Branch
uppercase. - Vergleiche die Historie dieses Branches mit
master. Wo laufen die Branches auseinander?
Rebase durchführen¶
- Rebase deinen
uppercase-Branch aufmaster:
git rebase master
- Was ist passiert? Schau dir die Historie an:
git log --oneline --graph --all. Die Commits vonuppercasewurden auf die Spitze vonmasteraufgesetzt. Es gibt keine Verzweigung mehr.
Fast-Forward-Merge nach dem Rebase¶
- Wechsle auf
master. - Merge
uppercaseinmaster:
git merge uppercase
- Wie sieht die Historie jetzt aus? Da
masterdirekt hinteruppercaselag, hat Git einen Fast-Forward-Merge durchgeführt. Das Ergebnis ist eine perfekt lineare Historie ohne Merge-Commit.
Typischer Workflow: Viele Teams nutzen das Muster "erst rebasen, dann mergen". Dadurch bleibt die Historie auf
masterimmer linear und leicht nachvollziehbar.
Nützliche Befehle¶
| Befehl | Beschreibung |
|---|---|
git rebase <branch> |
Aktuellen Branch auf einen anderen umbasieren |
git switch <branch> |
Branch wechseln |
git merge <branch> |
Branch mergen |
git log --oneline --graph --all |
Gesamte Historie anzeigen |