Rebase: was ist das, wie funktioniert rebase und Arbeit mit Git

Autor: IT Sectr Veröffentlicht: 2026-08-01 Lesezeit: 9 Min.

Rebase ist eine Git-Operation, die Commits von einem Branch an die Spitze eines anderen verschiebt und einen linearen Verlauf ohne unnötige Merge-Commits erstellt. Im Gegensatz zum Merge überschreibt Rebase den Verlauf: Jeder verschobene Commit erhält einen neuen Hash, da sich sein Eltern-Commit ändert. Laut Git-Dokumentation (2026) wird Rebase verwendet, um Feature-Branches vor dem Erstellen eines Pull-Requests mit dem aktuellen Stand von main zu synchronisieren. Der Befehl git rebase ist eines der wichtigsten Werkzeuge zur Aufrechterhaltung einer sauberen Historie in Projekten, die Git Flow verwenden.

Das Wichtigste

  • Rebase — verschiebt Commits des Feature-Branches an die Spitze des Zielbranches mit neuen Hashes.
  • Linearer Verlauf — der Hauptvorteil von Rebase: fehlende Merge-Commits vereinfachen das Lesen des Änderungsprotokolls.
  • Interaktiver Rebase mit dem Flag -i ermöglicht das Kombinieren, Umbenennen und Löschen von Commits vor der Veröffentlichung.
  • Öffentliche Branches — Rebase ist für Branches, mit denen andere Entwickler arbeiten, verboten, da es den Verlauf überschreibt.
  • Mögliche Konflikte — beim Verschieben von Commits kann Git die Auflösung von Konflikten für jeden einzelnen Commit anfordern.

Was ist Rebase in Git

Rebase ist ein Git-Befehl, der den aktuellen Branch auf einen angegebenen Branch umsetzt: Er nimmt alle Commits des aktuellen Branches, speichert sie temporär, verschiebt den Branch-Zeiger auf den Ziel-Commit und wendet die gespeicherten Commits nacheinander darauf an. Das Ergebnis — der Verlauf sieht so aus, als hätte der Entwickler direkt vom letzten Commit des Zielbranches aus gearbeitet.

Die grundlegende Syntax: git rebase main — während man sich in einem Feature-Branch befindet, verschiebt dieser Befehl alle Feature-Commits an die Spitze von main. Git verwendet für jeden einzelnen Commit eine Three-Way-Merge-Strategie. Wenn Commit A bereits im Zielbranch vorhanden ist (ermittelt durch Hash), überspringt Git ihn automatisch und vermeidet so doppelte Änderungen.

Rebase unterstützt auch den onto-Modus zum Verschieben einer Teilmenge von Commits: git rebase --onto target start end — diese Form erlaubt es, einen Bereich von Commits aus einem Branch zu extrahieren und auf einen anderen anzuwenden. Zum Beispiel verschiebt git rebase --onto main feature~3 feature die letzten drei Commits des Feature-Branches auf main.

bash
# Switch to feature branch
git checkout feature

# Rebase feature onto main
git rebase main

# After successful rebase — history is linear
git log --oneline --graph

# Move last 3 commits to main
git rebase --onto main HEAD~3 HEAD

Rebase vs Merge: Hauptunterschiede

Rebase und Merge lösen dieselbe Aufgabe — das Zusammenführen von Änderungen aus verschiedenen Branches — aber auf grundlegend unterschiedliche Weise. Merge bewahrt die vollständige Merge-Historie, indem es einen Merge-Commit mit zwei Eltern erstellt. Rebase überschreibt die Historie und macht sie linear. Die Wahl zwischen ihnen hängt vom Workflow des Teams und den Regeln der Repository-Verwaltung ab.

Der Hauptunterschied ist wie der Merge-Vorgang aufgezeichnet wird. Merge bewahrt: „an diesem Punkt haben wir feature in main gemergt“ — das ist informativ für die Projekt-Historie, aber verstopft das Protokoll bei häufigen Merges. Rebase zeigt: „Feature-Commits wurden nacheinander vom letzten main-Stand aus erstellt“ — das ist sauber, verbirgt aber die Tatsache, dass parallel entwickelt wurde.

Der zweite Unterschied ist die Konfliktbehandlung. Bei Merge werden Konflikte einmal gelöst und die Lösung im Merge-Commit festgehalten. Bei Rebase können für jeden verschobenen Commit Konflikte auftreten, die jeweils eine separate Lösung erfordern. Das ist aufwändiger, ermöglicht aber eine genauere Kontrolle darüber, welche Änderungen in die endgültige Version gelangen.

KriteriumRebaseMerge
HistorieLinear, ohne Merge-CommitsNicht-linear, mit Merge-Commits
Commit-HashesWerden überschrieben (neu)Originale bleiben erhalten
KonflikteFür jeden Commit einzelnEinmal im Merge-Commit
Öffentliche BranchesVerbotenErlaubt
Rückgängig-Befehlgit rebase --abortgit merge --abort

Interaktiver Rebase: Befehle und Flags

Interaktiver Rebase (git rebase -i) ist ein Modus, in dem Git einen Editor mit einer Liste von Commits und verfügbaren Aktionen für jeden öffnet. Der Entwickler kann die Historie vor dem Pushen in ein entferntes Repository umschreiben. Dies ist das primäre Werkzeug, um saubere Commits in einem Feature-Branch zu erhalten.

Verfügbare Befehle im interaktiven Modus: pick (Commit unverändert lassen), reword (Commit-Nachricht ändern), edit (für Änderungen anhalten), squash (mit vorherigem Commit zusammenführen, beide Nachrichten behalten), fixup (zusammenführen, Nachricht verwerfen), drop (Commit löschen). Jeder Befehl wird im geöffneten Editor vor dem Commit-Hash platziert.

Squash und Fixup sind die am häufigsten verwendeten Befehle zum Kombinieren von Commits. Wenn ein Entwickler während der Arbeit 5 kleine Korrektur-Commits gemacht hat, führt squash sie zu einem logischen Commit mit einer aussagekräftigen Nachricht zusammen. Fixup ist nützlich, um Tippfehler zu korrigieren: Änderungen gelangen in den vorherigen Commit, ohne ihre eigene Nachricht zu behalten.

bash
# Open editor for last 4 commits
git rebase -i HEAD~4

# Editor will show:
pick a1b2c3d Add authentication
pick e4f5g6h Fix typo in login
squash i6j7k8l Additional login fixes
pick m9n0o1p Add auth tests

# After saving — Git performs rebase
# and opens editor for squashed commit message

# Auto-squash without opening editor
git rebase -i HEAD~4 --autosquash

Das Flag --autosquash ordnet automatisch fixup/squash für Commits an, deren Nachrichten mit fixup! oder squash! beginnen. Das beschleunigt die Arbeit, wenn der Entwickler Commits vorab für die spätere Zusammenführung markiert. Das Flag --committer-date-is-author-date bewahrt das ursprüngliche Commit-Datum beim Rebasen — nützlich, um die zeitliche Chronologie im Verlauf zu erhalten.

Konfliktlösung bei Rebase

Konflikte beim Rebase treten auf, wenn Git einen verschobenen Commit aufgrund von Widersprüchen mit Änderungen im Zielbranch nicht automatisch anwenden kann. Anders als bei Merge, wo der Konflikt einmal gelöst wird, kann bei Rebase jeder Commit einen Konflikt verursachen, der für jeden Commit nacheinander vom ältesten zum neuesten gelöst werden muss.

Wenn ein Konflikt auftritt, pausiert Git den Rebase und meldet, welcher Commit das Problem verursacht hat. Der Entwickler öffnet die konfliktbehaftete Datei (Git markiert Konfliktbereiche mit <<<<<<<, =======, >>>>>>>-Markierungen), bearbeitet sie, fügt sie zum Index hinzu (git add) und setzt den Rebase mit git rebase --continue fort. Wenn keine Lösung gefunden wird — git rebase --abort bricht den Rebase vollständig ab.

Tipp: bei mehreren Konflikten ist es effizienter, git mergetool zu verwenden, das einen visuellen Editor zur Konfliktlösung öffnet. Man kann den problematischen Commit auch überspringen (git rebase --skip), aber das entfernt seine Änderungen aus der endgültigen Historie, was selten die richtige Entscheidung ist.

bash
# Start rebase with conflict
git rebase main
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt

# Check status
git status
# both modified: file.txt

# Edit conflicted sections → git add → continue
git add file.txt
git rebase --continue

# If uncertain — abort
git rebase --abort

Wann man Rebase nicht machen sollte

Die goldene Regel von Rebase: Rebase niemals Commits, die bereits in ein entferntes Repository gepusht und für andere Entwickler verfügbar sind. Da Rebase die Commit-Hashes überschreibt, werden Kollegen bei der Synchronisierung auf Konflikte stoßen — ihre lokale Historie wird von der umgeschriebenen entfernten Historie abweichen.

Eine Situation, in der Rebase kategorisch verboten ist: wenn jemand bereits einen Branch basierend auf Ihren Commits erstellt hat (z. B. hat ein Kollege einen Branch von Ihrem Feature-Branch abgezweigt), würde das Umschreiben der Historie seine Arbeit zerstören. In solchen Fällen sollte Merge verwendet werden. Es wird auch nicht empfohlen, kurz vor einer Deadline zu rebasen — ein Fehler bei der Konfliktlösung kann länger dauern als erwartet und die Veröffentlichung blockieren.

Ausnahme: wenn der Branch nur von einem einzigen Entwickler verwendet wird (persönlicher Feature-Branch, nicht veröffentlicht oder im Entwurfsmodus veröffentlicht), ist Rebase vor dem Push eine Standardpraxis. Nach der Veröffentlichung und dem Beginn der Zusammenarbeit — nur Merge. GitHub und GitLab bieten standardmäßig Squash Merge als Kompromiss an: es fasst Commits zu einem zusammen, überschreibt aber nicht die Historie des Zielbranches.

  • Öffentliche Branches (main, develop, release) — Rebase ist vollständig verboten.
  • Fremde Commits — wenn der Branch Commits eines anderen Entwicklers enthält, ist Rebase nicht zulässig.
  • Vor der Veröffentlichung — Konfliktrisiken sind höher: Merge ist einen Tag vor der Deadline sicherer.
  • Branches mit Tags — das Verschieben eines Commits mit Tag verstößt gegen die Konventionen des semantischen Versionierens.
  • CI/CD an Hashes gebunden — einige Bereitstellungssysteme identifizieren Builds anhand des Commit-Hashes; Rebase würde die Nachverfolgung brechen.

Praktischer Workflow mit Rebase

Moderne Teams verwenden am häufigsten einen Rebase-orientierten Workflow in Kombination mit GitHub Flow. Der Prozess sieht so aus: Der Entwickler erstellt einen Feature-Branch von main, arbeitet darin, synchronisiert regelmäßig über git rebase main und führt vor dem Erstellen eines Pull-Requests einen interaktiven Rebase durch, um die Historie zu bereinigen.

Nach dem Erstellen eines PR (wenn neue Änderungen aus main eingezogen werden müssen) wird git pull --rebase main anstelle eines normalen git pull verwendet. Dadurch werden Änderungen ohne Erstellen eines unnötigen Merge-Commits eingezogen. Git pull mit dem Flag --rebase ist äquivalent zu git fetch + git rebase — Git lädt zunächst neue Commits herunter und setzt dann lokale Änderungen darauf um.

Git erlaubt es, Rebase als Standardverhalten für Pull zu konfigurieren: git config --global pull.rebase true. Nach dieser Einstellung führt git pull immer Rebase statt Merge aus. Wenn ein normaler Pull benötigt wird — verwendet man git pull --no-rebase. Viele Teams aktivieren auch Autostash: git config --global rebase.autoStash true — dies versteckt nicht-committete Änderungen automatisch vor dem Rebase und stellt sie danach wieder her.

Häufig gestellte Fragen

Was bedeutet es, Commits in Git zu rebasen?

Rebasen bedeutet, git rebase auszuführen: Commits des aktuellen Branches an die Spitze eines anderen zu verschieben. Dadurch wird die Historie linear, jeder Commit erhält einen neuen Hash und es werden keine Merge-Commits erstellt. Der Befehl wird verwendet, um Branches ohne unnötige Merge-Punkte im Log zu synchronisieren.

Wie unterscheidet sich Rebase von Merge?

Merge erstellt einen Merge-Commit mit zwei Eltern, bewahrt parallele Historie und originale Hashes. Rebase überschreibt die Historie — Commits erhalten neue Hashes und die Historie wird linear. Merge ist sicherer für öffentliche Branches, Rebase liefert ein saubereres Log.

Wie macht man einen interaktiven Rebase?

Der Befehl git rebase -i HEAD~N öffnet einen Editor mit den letzten N Commits. Für jeden Commit kann man eine Aktion wählen: pick (behalten), reword (umbenennen), edit (ändern), squash (mit vorherigem zusammenführen), fixup (ohne Nachricht zusammenführen), drop (löschen). Nach dem Speichern wendet Git die gewählten Änderungen an.

Warum ist Rebase für öffentliche Branches gefährlich?

Rebase überschreibt Commit-Hashes, wodurch die Historie inkompatibel mit Kopien derselben Commits auf den Rechnern anderer Entwickler wird. Wenn ein Kollege Ihre Commits bereits über git pull erhalten hat und Sie sie dann rebased haben, wird sein git push abgelehnt und git pull erstellt doppelte Commits und Konflikte.

Kann man Rebase nach der Ausführung rückgängig machen?

Vor dem Abschluss — git rebase --abort bricht vollständig ab. Nach dem Abschluss kann der vorherige Zustand über git reflog wiederhergestellt werden — den Commit-Hash vor dem Rebase finden und git reset --hard darauf ausführen. Reflog speichert standardmäßig 30 Tage lang die Bewegungen von HEAD.

Zusammenfassung

  • Rebase — eine Operation, die Commits auf eine neue Basis verschiebt und einen linearen Verlauf ohne Merge-Commits erstellt.
  • Befehl git rebase main setzt den aktuellen Branch auf main um, wendet Commits nacheinander darauf an.
  • Interaktiver Modus -i ermöglicht das Zusammenführen (squash), Umbenennen (reword) und Löschen (drop) von Commits.
  • Konflikte werden beim Rebase für jeden Commit einzeln gelöst, anders als bei Merge.
  • Öffentliche Branches sollten nicht rebased werden — das zerstört die Historie für andere Entwickler.
  • git pull --rebase — eine sichere Möglichkeit, mit einem entfernten Branch ohne Merge-Commit zu synchronisieren.
  • Git reflog ermöglicht die Wiederherstellung nach einem fehlgeschlagenen Rebase innerhalb von 30 Tagen.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch