Normalerweise würdest du Folgendes verwenden git rebase:
- Frühere Commit-Mitteilungen bearbeiten
- Mehrere Commits zu einem einzigen zusammenfassen
- Nicht mehr benötigte Commits löschen oder zurücksetzen
Warnung
Da Veränderungen am Commit-Verlauf für alle anderen Benutzer des Repositorys zu Schwierigkeiten führen können, gilt es als schlechte Praxis, Commits zu rebasen, nachdem du sie in ein Repository gepusht hast. Informationen zum sicheren Ausführen eines Rebasings finden Sie unter Informationen zum Zusammenführen von Pull Requests.
Rebasing von Commits auf einen Branch
Um alle Commits zwischen einem anderen Branch und dem aktuellen Stand des Branches zu rebasen, können Sie den folgenden Befehl in die Shell eingeben (entweder die Eingabeaufforderung für Windows oder das Terminal für Mac und Linux):
git rebase --interactive OTHER-BRANCH-NAME
Rebasen von Commits gegen einen bestimmten Zeitpunkt
Um ein Rebase für die letzten paar Commits in deinem aktuellen Branch durchzuführen, kannst du den folgenden Befehl in deiner Shell eingeben:
git rebase --interactive HEAD~7
Befehle, die beim Rebasen verfügbar sind
Beim Rebasing stehen sechs Befehle zur Verfügung:
pick-
pickbedeutet einfach, dass der Commit enthalten ist. Wenn du die Reihenfolge derpick-Befehle neu anordnest, ändert sich die Reihenfolge der Commits während des Rebase-Vorgangs. Wenn du keinen Commit einbeziehen möchtest, solltest du die gesamte Zeile löschen. reword- Der Befehl
rewordist vergleichbar mitpick. Nachdem du ihn verwendet hast, wird der Rebase-Prozess jedoch angehalten, sodass du die Commitnachricht ändern kannst. Die Änderungen, die durch den Commit vorgenommen werden, sind davon nicht betroffen. edit- Wenn du
editfür einen Commit auswählst, hast du die Möglichkeit, den Commit zu ändern, was bedeutet, dass du den Commit hinzufügen oder komplett ändern kannst. Du kannst auch zusätzliche Commits erstellen, bevor du mit dem Rebasing fortfährst. Auf diese Weise kannst du einen großen Commit in kleinere aufteilen oder fehlerhafte Änderungen, die in einem Commit vorgenommen wurden, entfernen. squash- Mit diesem Befehl kannst du zwei oder mehr Commits zu einem einzigen Commit zusammenfassen. Ein Commit wird in den Commit darüber eingefügt. Git gibt Dir die Möglichkeit, eine neue Commit-Mitteilung zu schreiben, die beide Änderungen beschreibt.
fixup- Dies ist vergleichbar mit
squash. Allerdings wird die Nachricht des zusammenzuführenden Commits verworfen. Der Commit wird einfach in den darüberliegenden Commit zusammengeführt, und die Nachricht des vorstehenden Commits wird verwendet, um beide Änderungen zu beschreiben. exec- Hiermit kannst du beliebige Shell-Befehle auf einem Commit ausführen.
Hier ist ein Beispiel zur Verwendung von git rebase.
Unabhängig davon, welchen Befehl du verwendest, startet Git deinen Standard-Text-Editor und öffnet eine Datei, die die Commits im ausgewählten Bereich enthält. Diese Datei sieht in etwa so aus:
pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch B
# Rebase 41a72e6..7b36971 onto 41a72e6
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Wenn man diese Informationen von oben nach unten betrachtet, wird Folgendes deutlich:
- Es werden sieben Commits aufgelistet, was darauf hindeutet, dass es sieben Änderungen zwischen unserem Startpunkt und unserem aktuellen Branch-Status gab.
- Die Commits, die du für das Rebasing ausgewählt hast, werden in der Reihenfolge der ältesten Änderungen (oben) bis hin zu den neuesten Änderungen (unten) sortiert.
- In jeder Zeile sind ein Befehl (standardmäßig
pick), der Commit-SHA und die Commitnachricht aufgeführt. Beim gesamtengit rebase-Verfahren geht es um die Änderung dieser drei Spalten. Die vorgenommenen Änderungen werden auf dein Repository rebased. - Nach den Commits erfährst du in Git, mit welchem Commitbereich wir arbeiten (
41a72e6..7b36971). - Schließlich bietet Git etwas Unterstützung, indem es Dir die Befehle nennt, die Dir beim Rebasing von Commits zur Verfügung stehen.
Weiterführende Lektüre
-
[AUTOTITLE](/get-started/using-git/using-git-rebase-on-the-command-line) -
[Kapitel „Git-Branching“ im _Pro Git_-Buch](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) -
[Kapitel „Interaktives Rebasing“ im _Pro Git_-Buch](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_changing_multiple) -
[Squashen von Commits mit Rebase](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html) -
[AUTOTITLE](/desktop/working-with-your-remote-repository-on-github-or-github-enterprise/syncing-your-branch-in-github-desktop) in der Dokumentation zu GitHub Desktop