Lab 16: Squashing mit Interactive Rebase (Terminal)¶
Während der Arbeit an einem Feature entstehen oft viele kleine Commits: "WIP",
"Fix typo", "Forgot file", "Now really fixed". Bevor du deine Arbeit teilst oder
in master mergst, ist es sinnvoll, diese Commits zu einem sauberen,
aussagekräftigen Commit zusammenzufassen. Diesen Vorgang nennt man
Squashing.
Das Werkzeug dafür ist git rebase -i (Interactive Rebase). Damit kannst du
Commits nachträglich zusammenfassen, umsortieren, umbenennen oder entfernen.
Vorbereitung¶
Öffne das Terminal im Verzeichnis labs/16-squashing/exercise.
Aufgaben¶
Commits zusammenfassen (Squash)¶
-
Schau dir die Historie an:
git log --oneline. Die fünf neuesten Commits bearbeiten allefile.txtund gehören logisch zusammen. -
Starte einen interaktiven Rebase über die letzten fünf Commits:
git rebase -i HEAD~5
Git öffnet einen Editor mit einer Liste der Commits. Vor jedem Commit steht
das Wort pick:
pick abc1234 Erster Commit
pick def5678 Zweiter Commit
pick ghi9012 Dritter Commit
...
- Ändere bei den vier unteren Commits das Wort
pickzusquash(oder kurzs). Der erste Commit bleibt aufpick. Die Commits werden dann alle in den ersten hinein zusammengefasst:
pick abc1234 Erster Commit
squash def5678 Zweiter Commit
squash ghi9012 Dritter Commit
...
-
Speichere und schließe den Editor. Git öffnet einen zweiten Editor, in dem du die Commit-Nachricht für den zusammengefassten Commit schreiben kannst. Schreibe eine gute, aussagekräftige Nachricht.
-
Prüfe die Historie:
git log --oneline. Statt fünf Commits sollte jetzt nur noch einer da sein.
Dateiinhalt aufräumen ohne zusätzlichen Commit¶
- Öffne
file.txt- die Datei enthält störende\n-Zeichen. Entferne sie. - Füge die Änderung hinzu und nutze
git commit --amend, um sie in den letzten Commit aufzunehmen, ohne einen neuen Commit zu erzeugen.
Regeln für gute Commit-Nachrichten¶
Aus How to Write a Git Commit Message:
- Trenne Betreff und Textkörper mit einer Leerzeile
- Begrenze die Betreffzeile auf 50 Zeichen
- Beginne die Betreffzeile mit einem Großbuchstaben
- Beende die Betreffzeile nicht mit einem Punkt
- Verwende den Imperativ ("Add feature" statt "Added feature")
- Beschränke den Textkörper auf 72 Zeichen pro Zeile
- Erkläre im Textkörper das Was und Warum, nicht das Wie
Beispiel:
Zusammenfassung in ca. 50 Zeichen
Ausführlicherer Text, falls nötig. Erkläre hier, warum die
Änderung gemacht wurde und welches Problem sie löst. Beschreibe
mögliche Nebeneffekte oder nicht offensichtliche Konsequenzen.
- Aufzählungspunkte sind ebenfalls in Ordnung
- Ein Bindestrich wird als Aufzählungszeichen verwendet
Resolves: #123
See also: #456
Nützliche Befehle¶
| Befehl | Beschreibung |
|---|---|
git rebase -i <ref> |
Interaktiven Rebase starten |
git commit --amend |
Letzten Commit nachträglich ändern |
git log --oneline |
Kompakte Historie |