{"meta":{"title":"Git rebase an der Befehlszeile verwenden","intro":"Im Folgenden findest du ein kurzes Tutorial zur Verwendung von git rebase über die Befehlszeile.","product":"Erste Schritte","breadcrumbs":[{"href":"/de/get-started","title":"Erste Schritte"},{"href":"/de/get-started/using-git","title":"Git verwenden"},{"href":"/de/get-started/using-git/using-git-rebase-on-the-command-line","title":"Git Rebase"}],"documentType":"article"},"body":"# Git rebase an der Befehlszeile verwenden\n\nIm Folgenden findest du ein kurzes Tutorial zur Verwendung von git rebase über die Befehlszeile.\n\n## Rebase mit Git verwenden\n\nIn diesem Beispiel werden mit Ausnahme von `git rebase` alle verfügbaren `exec`-Befehle vorgestellt.\n\nWir beginnen das Rebasing, indem wir `git rebase --interactive HEAD~7` im Terminal eingeben. Unser bevorzugter Texteditor zeigt die folgenden Zeilen an:\n\n```text\npick 1fc6c95 Patch A\npick 6b2481b Patch B\npick dd1475d something I want to split\npick c619268 A fix for Patch B\npick fa39187 something to add to patch A\npick 4ca2acc i cant' typ goods\npick 7b36971 something to move before patch B\n```\n\nIn diesem Beispiel führen wir folgende Schritte aus:\n\n* Den fünften Commit (`fa39187`) mithilfe von `squash` in den `\"Patch A\"`-Commit (`1fc6c95`) squashen.\n* Den letzten Commit (`7b36971`) vor den `\"Patch B\"`-Commit (`6b2481b`) verschieben und als `pick` behalten.\n* Den `\"A fix for Patch B\"`-Commit (`c619268`) mit dem `\"Patch B\"`-Commit (`6b2481b`) zusammenführen und die Commitnachricht mit `fixup` ignorieren.\n* Den dritten Commit (`dd1475d`) mithilfe von `edit` in zwei kleinere Commits aufteilen.\n* Korrigiere die Commit-Nachricht des falsch geschriebenen Commits (`4ca2acc`), indem du `reword` verwendest.\n\nPuh! Klingt nach jeder Menge Arbeit, doch indem wir die Schritte einzeln durchführen, können wir diese Änderungen ohne Weiteres vornehmen.\n\nZunächst müssen wir die Befehle in der Datei wie folgt ändern:\n\n```text\npick 1fc6c95 Patch A\nsquash fa39187 something to add to patch A\npick 7b36971 something to move before patch B\npick 6b2481b Patch B\nfixup c619268 A fix for Patch B\nedit dd1475d something I want to split\nreword 4ca2acc i cant' typ goods\n```\n\nWir haben den Befehl in jeder Zeile von `pick` in den gewünschten Befehl geändert.\n\nSpeichere nun den Vorgang und schließe den Editor. Dadurch wird der interaktive Rebase-Vorgang gestartet.\n\nGit überspringt den ersten Rebase-Befehl `pick 1fc6c95`, da nichts unternommen werden muss, und geht zum nächsten Befehl über: `squash fa39187`. Da für diesen Vorgang deine Eingabe erforderlich ist, öffnet Git den Texteditor erneut. Die geöffnete Datei sieht in etwa wie folgt aus:\n\n```text\n# This is a combination of two commits.\n# The first commit's message is:\n\nPatch A\n\n# This is the 2nd commit message:\n\nsomething to add to patch A\n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be ignored, and an empty message aborts the commit.\n# Not currently on any branch.\n# Changes to be committed:\n#   (use \"git reset HEAD <file>...\" to unstage)\n#\n# modified:   a\n#\n```\n\nSo sagt Git: \"Hey, das habe ich mit diesem `squash` vor.\" Sie enthält die Nachricht des ersten Commits (`\"Patch A\"`) und die Nachricht des zweiten Commits (`\"something to add to patch A\"`). Wenn du mit diesen Commit-Mitteilungen zufrieden bist, kannst du die Datei speichern und den Editor schließen. Andernfalls kannst du einfach den Text der Commit-Mitteilung ändern.\n\nWenn der Editor geschlossen ist, wird der Rebase-Vorgang fortgesetzt:\n\n```text\npick 1fc6c95 Patch A\nsquash fa39187 something to add to patch A\npick 7b36971 something to move before patch B\npick 6b2481b Patch B\nfixup c619268 A fix for Patch B\nedit dd1475d something I want to split\nreword 4ca2acc i cant' typ goods\n```\n\nGit verarbeitet die beiden `pick`-Befehle (für `pick 7b36971` und `pick 6b2481b`).\n*Außerdem* wird der `fixup`-Befehl (`fixup c619268`) verarbeitet, da er keine Interaktion erfordert.\n`fixup` führt die Änderungen von `c619268` mit dem Commit davor (`6b2481b`) zusammen. Beide Änderungen weisen dieselbe Commitnachricht auf: `\"Patch B\"`.\n\nGit gelangt zum `edit dd1475d`-Vorgang, hält an und gibt im Terminal die folgende Meldung aus:\n\n```shell\nYou can amend the commit now, with\n\n        git commit --amend\n\nOnce you are satisfied with your changes, run\n\n        git rebase --continue\n```\n\nAn diesem Punkt kannst du die Dateien in deinem Projekt bearbeiten, um zusätzliche Änderungen vorzunehmen. Für jede von dir vorgenommene Änderung musst du einen neuen Commit durchführen. Gib dazu den Befehl `git commit --amend` ein. Nachdem du alle Änderungen vorgenommen hast, kannst du `git rebase --continue` ausführen.\n\nAnschließend gelangt Git zum Befehl `reword 4ca2acc`. Daraufhin wird dein Texteditor erneut geöffnet und die folgenden Informationen werden angezeigt:\n\n```text\ni cant' typ goods\n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be ignored, and an empty message aborts the commit.\n# Not currently on any branch.\n# Changes to be committed:\n#   (use \"git reset HEAD^1 <file>...\" to unstage)\n#\n# modified:   a\n#\n```\n\nGit zeigt erneut die zu bearbeitende Commit-Mitteilung an. Du kannst den Text ändern (`\"i cant' typ goods\"`), die Datei speichern und den Editor schließen. Git schließt den Rebase-Vorgang ab, und du kehrst zum Terminal zurück.\n\n## Pushen von neu basierten Code auf GitHub\n\nDa du den Git-Verlauf geändert hast, funktioniert das normale `git push origin`**nicht**. Du musst den Befehl ändern, indem du deine neuesten Änderungen per erzwungenem Push-Vorgang überträgst:\n\n```shell\n# Don't override changes\n$ git push origin main --force-with-lease\n\n# Override changes\n$ git push origin main --force\n```\n\n> \\[!WARNING]\n> Das erzwungene Pushen hat ernste Auswirkungen, da so die zeitliche Abfolge von Commits für den Branch geändert wird. Verwenden Sie es mit Vorsicht, insbesondere wenn mehrere Personen auf Ihr Repository zugreifen.\n\n## Weiterführende Lektüre\n\n* [Mergekonflikte nach einem „git rebase“ lösen](/de/get-started/using-git/resolving-merge-conflicts-after-a-git-rebase)"}