bg_image
header

Interactive Rebase

Ein Interactive Rebase ist eine erweiterte Funktion des Versionskontrollsystems Git, mit der du mehrere Commits in einem Branch überarbeiten, neu anordnen, zusammenführen oder löschen kannst. Im Gegensatz zu einem normalen Rebase, bei dem die Commits einfach auf einen neuen Basis-Commit „umgehängt“ werden, bietet ein interaktiver Rebase die Möglichkeit, jeden Commit in der Rebase-Reihe individuell zu bearbeiten.

Wann und warum wird ein Interactive Rebase verwendet?

  • Aufräumen der Commit-Historie: Vor dem Zusammenführen eines Branches in den Hauptzweig (z.B. main oder master) kannst du die Commit-Historie bereinigen, indem du unnötige Commits zusammenführst oder entfernst.
  • Reihenfolge ändern: Du kannst die Reihenfolge der Commits ändern, wenn sie in einer bestimmten Reihenfolge sinnvoller erscheinen.
  • Fixes zusammenfassen: Kleinere Fehlerkorrekturen, die nach einem Feature-Commit gemacht wurden, können mit dem ursprünglichen Commit zusammengeführt werden, um eine übersichtlichere und verständlichere Historie zu erstellen.
  • Commit-Messages bearbeiten: Du kannst die Commit-Nachrichten ändern, um klarere und aussagekräftigere Nachrichten zu hinterlassen.

Wie funktioniert ein Interactive Rebase?

Angenommen, du möchtest die letzten 4 Commits eines Branches bearbeiten, führst du folgendes Kommando aus:

git rebase -i HEAD~4

Ablauf:

1. Auswahl der Commits:

  • Nachdem du den Befehl eingegeben hast, öffnet sich ein Texteditor mit einer Liste der ausgewählten Commits. Jeder Commit ist mit dem Schlüsselwort pick markiert, gefolgt von der Commit-Nachricht.

Beispiel:

pick a1b2c3d Commit message 1
pick b2c3d4e Commit message 2
pick c3d4e5f Commit message 3
pick d4e5f6g Commit message 4

2. Bearbeiten der Commits:

  • Du kannst die pick-Befehle durch andere Schlüsselwörter ersetzen, um verschiedene Aktionen durchzuführen:
    • pick: Behalte den Commit unverändert.
    • reword: Ändere die Commit-Nachricht.
    • edit: Stoppt das Rebase, damit du Änderungen am Commit vornehmen kannst.
    • squash: Kombiniere den Commit mit dem vorherigen.
    • fixup: Kombiniere den Commit mit dem vorherigen, ohne die Commit-Nachricht zu behalten.
    • drop: Entferne den Commit.

Beispiel für eine bearbeitete Liste:

pick a1b2c3d Commit message 1
squash b2c3d4e Commit message 2
reword c3d4e5f New commit message 3
drop d4e5f6g Commit message 4

3. Speichern und Ausführen:

  • Nachdem du die Liste angepasst hast, speicherst du und schließt den Editor. Git führt dann die Rebase mit den angegebenen Aktionen durch.

4. Konflikte lösen:

  • Falls es während des Rebases zu Konflikten kommt, musst du diese manuell beheben und dann den Rebase-Prozess mit git rebase --continue fortsetzen.

Wichtige Hinweise:

  • Unterscheidung zwischen lokaler und gemeinsamer Historie: Interactive Rebase sollte in der Regel nur auf Commits angewendet werden, die noch nicht mit anderen geteilt wurden (z.B. auf einem Remote-Repository), da das Umschreiben der Historie nachteilige Auswirkungen auf andere Entwickler haben kann.
  • Sicherung: Es ist ratsam, vor einem Rebase eine Sicherung (z.B. durch einen temporären Branch) zu erstellen, um im Falle eines Fehlers zur ursprünglichen Historie zurückkehren zu können.

Zusammenfassung:

Interactive Rebase ist ein mächtiges Werkzeug in Git, das es ermöglicht, die Commit-Historie zu bereinigen, zu reorganisieren und zu optimieren. Es erfordert etwas Übung und Verständnis der Git-Konzepte, bietet aber eine große Flexibilität, um die Geschichte eines Projekts klar und nachvollziehbar zu gestalten.