Hallo, Entdecker! An dieser Seite wird aktiv gearbeitet, oder sie wird noch übersetzt. Die neuesten und genauesten Informationen finden Sie in unserer englischsprachigen Dokumentation.

Diese Version von GitHub Enterprise wird eingestellt am Diese Version von GitHub Enterprise wurde eingestellt am 2020-01-22. Es wird keine Patch-Freigabe vorgenommen, auch nicht für kritische Sicherheitsprobleme. Für eine bessere Leistung, verbesserte Sicherheit und neue Features nehmen Sie ein Upgrade auf die neueste Version von GitHub Enterprise vor. Wenden Sie sich an den GitHub Enterprise-Support, um Hilfe beim Upgrade zu erhalten.

Git rebase an der Befehlszeile verwenden

Im Folgenden finden Sie ein kurzes Tutorial zur Verwendung von „git rebase“ an der Befehlszeile.

Inhalt dieses Artikels

In diesem Beispiel werden mit Ausnahme von exec alle verfügbaren git rebase-Befehle vorgestellt.

Wir geben zunächst am Terminal git rebase --interactive HEAD~7 ein, um den Rebase-Vorgang zu starten. Unser bevorzugter Texteditor zeigt die folgenden Zeilen an:

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

Im folgenden Beispiel

  • squashen wir mittels squash den fünften Commit (fa39187) in den Commit "Patch A" (1fc6c95),
  • verschieben wir den letzten Commit (7b36971) direkt vor den Commit "Patch B" (6b2481b) und behalten ihn als pick bei,
  • mergen wir den Commit "A fix for Patch B" (c619268) in den Commit "Patch B" (6b2481b) und ignorieren die Commit-Mitteilung mittels fixup,
  • teilen wir den dritten Commit (dd1475d) mittels edit in zwei kleinere Commits auf,
  • korrigieren wir mittels reword den fehlerhaften Commit in der Commit-Mitteilung.

Puh! Klingt nach jeder Menge Arbeit, doch indem wir die Schritte einzeln durchführen, können wir diese Änderungen ohne Weiteres vornehmen.

Zunächst müssen wie die Befehle in der Datei wie folgt ändern:

pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods

Wir haben den Befehl jeder Zeile von pick in den gewünschten Befehl geändert.

Speichern Sie nun den Vorgang, und schließen Sie den Editor. Dadurch wird der interaktive Rebase-Vorgang gestartet.

Git überspringt den ersten Rebase-Befehl pick 1fc6c95, da nichts vorgenommen werden muss. Git springt zum nächsten Befehl squash fa39187. Da für diesen Vorgang Ihre Eingabe erforderlich ist, öffnet Git den Texteditor erneut. Die geöffnete Datei sieht in etwa wie folgt aus:

# Dies ist eine Kombination der zwei Commits.
# Die erste Commit-Mitteilung lautet:

Patch A

# Dies ist die 2. Commit-Mitteilung:

something to add to patch A

# Geben Sie die Commit-Mitteilung für Ihre Änderungen an. Zeilen, die
# mit „#“ beginnen, werden ignoriert, und eine leere Mitteilung bricht den Commit ab.
# Derzeit auf keinem Branch vorhanden.
# Zu committende Änderungen:
#   (zum Aufheben der Vormerkung „git reset HEAD <file>...“ verwenden)
#
# geändert:   a
#

Die Datei zeigt an, welche Aktionen mit diesem squash durchgeführt werden. Darin werden die Mitteilung des ersten Commits ("Patch A") und die Mitteilung des zweiten Commits ("something to add to patch A") aufgelistet. Wenn Sie mit diesen Commit-Mitteilungen zufrieden sind, können Sie die Datei speichern und den Editor schließen. Andernfalls können Sie einfach den Text der Commit-Mitteilung ändern.

Wenn der Editor geschlossen ist, wird der Rebase-Vorgang fortgesetzt:

pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods

Git verarbeitet die zwei pick-Befehle (für pick 7b36971 und pick 6b2481b). Zudem wird der Befehl fixup (fixup c619268) verarbeitet, da er keine Interaktion erfordert. fixup mergt die Änderungen von c619268 in den Commit davor 6b2481b. Beide Änderungen weisen dieselbe Commit-Mitteilung auf: "Patch B".

Git gelangt zum edit dd1475d-Vorgang, hält an und gibt im Terminal die folgende Meldung aus:

You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

An diesem Punkt können Sie die Dateien in Ihrem Projekt bearbeiten, um zusätzliche Änderungen vorzunehmen. Für jede von Ihnen vorgenommene Änderung müssen Sie einen neuen Commit durchführen. Geben Sie dazu den Befehl git commit --amend ein. Nachdem Sie alle Ihre Änderungen durchgeführt haben, können Sie git rebase --continue ausführen.

Anschließend gelangt Git zum Befehl reword 4ca2acc. Daraufhin wird Ihr Texteditor erneut geöffnet und die folgenden Informationen werden angezeigt:

i cant' typ goods

# Geben Sie die Commit-Mitteilung für Ihre Änderungen an. Zeilen, die
# mit „#“ beginnen, werden ignoriert, und eine leere Mitteilung bricht den Commit ab.
# Derzeit auf keinem Branch vorhanden.
# Zu committende Änderungen:
#   (zum Aufheben der Vormerkung „git reset HEAD^1 <file>...“ verwenden)
#
# geändert:   a
#

Git zeigt erneut die zu bearbeitende Commit-Mitteilung an. Sie können den Text ("i cant' typ goods") ändern, die Datei speichern und den Editor schließen. Git schließt den Rebase-Vorgang ab, und Sie kehren zum Terminal zurück.

Code mit Rebasing an GitHub übertragen

Der gewöhnliche Befehl git push origin funktioniert nicht, da Sie den Git-Verlauf geändert haben. Sie müssen den Befehl ändern, indem Sie Ihre neuesten Änderungen per erzwungenem Push-Vorgang übertragen.

$ git push origin master --force

Erzwungene Push-Vorgänge haben schwerwiegende Auswirkungen, insbesondere wenn mehrere Personen auf Ihr Repository zugreifen. So kann es mindestens vorkommen, dass Ihre Commits in den Pull Requests nicht mehr die richtige Reihenfolge aufweisen. Weitere Informationen finden Sie unter „Warum werden meine Commits in der falschen Reihenfolge angezeigt?

Weiterführende Informationen

Menschliche Unterstützung einholen

Sie können das Gesuchte nicht finden?

Kontakt