Das Open-Source-Versionsverwaltungstool Git ist in Version 2.22 verfügbar. Darin sind einige Neuerungen enthalten. Das Feature --preserve-merges
gilt nun als deprecated, doch ein Ersatz mit erweiterter Funktionalität steht schon seit einigen Versionen bereit. Worum geht es bei der als veraltet deklarierten Funktion und was kann die neue Funktion besser? Der GitHub-Blog liefert Beispiele.
Hintergrund: Rebasing in Git
git rebase
wiederholt eine Serie von Commits auf einem neuen initialen Commit, z. B. wenn sich der Master Branch verändert hat. Das demonstriert GitHub anhand eines Beispiels. Zunächst wird ausgehend von einem Master Branch ein weiterer Branch erstellt:

Rebasing; Quelle: GitHub
Der Master Branch wurde verändert, während der Feature Branch an der gleichen Stelle verbleibt:

Rebasing; Quelle: GitHub
So stellt sich der Stand nach dem Rebasing des Feature Branch auf den neuen Master Branch dar:

Rebasing; Quelle: GitHub
Schwieriger wird es, wenn anders als im obigen Beispiel my-feature
seine eigene Zweigstruktur besitzt oder man die interaktiven Features von rebase
nutzen will, z. B. das Entfernen, Umstellen oder Umbenennen von Commits. Wenn kein Wert auf die Interaktivität gelegt wird, kann zwar --preserve-merges
genutzt werden. Diese Option gilt jedoch ab Git 2.22 als veraltet.
Git 2.22: --rebase-merges
Ab der aktuellen Git-Version soll --rebase-merges
verwendet werden, das schon in Git 2.18 eingeführt wurde. Dadurch kann die gesamte Topologie eines Commit-Graphen verschoben werden. Die Funktion soll die Struktur der Änderungen bewahren, ohne die volle Rebasing-Interaktivität zu verlieren.
Auf dem GitHub-Blog wird die Anwendung von --rebase-merges
in einem Gif demonstriert. Dort wird beim Rebasing die Zweigstruktur von my-feature
beibehalten. Gleichzeitig können Änderungen an der Commit Message eingefügt werden, was durch die Behebung eines Tippfehlers simuliert wird:

Interaktives Rebase Merge in Git 2.22; Quelle: GitHub
Weitere Features in Git 2.22
Zu den weiteren Neuerungen in Version 2.22 zählt, dass git branch
und git checkout -b
die Merge-Base-Syntax mit drei Punkten beherrschen. Git 2.22 bringt zudem Trace2 mit, einen neuen Tracing-Mechanismus. Er erlaubt das Festlegen eines Ziels, um langlaufende Performance- und Telemetriedaten zu erhalten, ist allerdings standardmäßig deaktiviert. Auch einige Bugs wurden in Git 2.22 behoben.
Alle weiteren Details zur neuen Git-Version gibt es in den Release Notes und im GitHub-Blogeintrag.