Git-Rebase-Zweig: So führen Sie ein sicheres Rebase durch, Schritt für Schritt
Das Rebasing erfordert einen Befehl. Um es sicher zu machen, braucht es noch ein paar mehr: Speichern Sie den alten Tipp, behandeln Sie jeden Konflikt, vergleichen Sie das Ergebnis und pushen Sie, ohne einen Teamkollegen zu überschreiben. Hier ist die ganze Sequenz.
Geschrieben von Kodmora
Das Softwarehaus hinter GitTree
- Rebase
- Zweige
- Konflikte zusammenführen
- Remotes und Push
Auf dieser Seite
Um einen Zweig neu zu basieren, rufen Sie ihn ab, wechseln Sie zu ihm und spielen Sie ihn auf der neuen Basis ab: `git fetch origin`, `git switch topic`, `git rebase origin/main`. Git legt die eigenen Commits Ihres Zweigs beiseite, verschiebt den Zweig an die Spitze von origin/main und wendet die Commits dann einzeln erneut an. Der Verlauf bleibt eine gerade Linie ohne Zusammenführungs-Commit. Jeder wiederholte Commit erhält einen neuen Hash, sodass ein Zweig, den Sie bereits gepusht haben, anschließend git push --force-with-lease benötigt.
Was macht Git Rebase mit einem Zweig?
Angenommen, topic hat zwei eigene Commits und main hat seit dem Start des Zweigs drei hinzugewonnen. Durch die Neubasierung wird dieser Ausgangspunkt aktualisiert, ohne dass main mit Ihrem Zweig zusammengeführt wird:
# before
A---B---C---D---E origin/main
\
F---G topic
# after git rebase origin/main
A---B---C---D---E origin/main
\
F'---G' topicF' und G' enthalten dieselben Änderungen und Nachrichten wie F und G, aber es handelt sich um neue Commits mit neuen Hashes, da sich ihre Eltern geändert haben. Bei einer Zusammenführung vom selben Startpunkt aus würden beide Zeilen beibehalten und ein Commit mit zwei Eltern hinzugefügt. Die Lektion zu merge versus rebase zeigt beides in einem Diagramm.
Wie kann ich einen Zweig Schritt für Schritt sicher umbasieren?
Zuerst prüfen, den alten Tipp behalten, noch einmal abspielen und dann testen. Die ersten drei Befehle schreiben nichts um:
# 1. update origin/main, your files stay as they are
git fetch origin
# 2. list the commits Git will replay
git log --oneline origin/main..topic
# 3. keep a name on the old tip
git branch topic-backup topic
# 4. replay
git switch topic
git rebase origin/mainStoppen Sie bei Schritt 2, wenn die Liste einen Commit enthält, den Sie nicht kennen, da dies bedeutet, dass der Zweig nicht an der erwarteten Stelle begonnen hat. Wenn das Rebase beendet ist, führen Sie git status aus, um zu bestätigen, dass es abgeschlossen ist, und führen Sie dann Ihre Tests durch. Ein Rebase ohne Konflikte kann dennoch das Verhalten unterbrechen.
Benennen Sie jedes Mal die Basis. Ein bloßes git rebase verwendet den Upstream des Zweigs, der häufig origin/topic und nicht main ist. Um einen Zweig zu verschieben, der von einem anderen Feature-Zweig aus gestartet wurde, benennen Sie auch die alte Basis: git rebase --onto main old-base topic. In der Lektion zum Neubasieren unveröffentlichter Arbeiten wird dies anhand eines realen Diagramms geübt.
Wie behebe ich Konflikte während eines Rebases?
Git wendet Ihre Commits einzeln an, sodass es mehr als einmal anhalten kann, sogar in denselben Zeilen. Korrigieren Sie nur das Commit, bei dem Git angehalten wurde, da die späteren noch nicht angewendet wurden:
# edit the file and remove the conflict markers, then
git add path/to/file
git rebase --continue| Befehl | Was es bewirkt | Verwenden Sie es wann |
|---|---|---|
git rebase --continue | Zeichnet das bereitgestellte Ergebnis auf und geht zum nächsten Commit über. | Der Konflikt wird gelöst und gestagt. |
git rebase --skip | Löscht den Commit, der wiedergegeben wird. | Sie haben bestätigt, dass die Änderung bereits im Upstream erfolgt. |
git rebase --abort | Stoppt und bringt den Zweig dorthin zurück, wo er war. | Sie haben die falsche Basis oder den falschen Zweig ausgewählt, oder der Konflikt erfordert mehr Überlegung. |
Wenn Sie denselben Konflikt häufig wiederholen, zeichnet git config rerere.enabled true Ihre Lösung auf und verwendet sie erneut. Überprüfen Sie jedes wiederverwendete Ergebnis, da die Antwort von gestern im heutigen Code falsch sein kann. In der Lektion zu Weiter, Überspringen und Abbrechen geht es um jeden einzelnen Fall, und Wie man Zusammenführungskonflikte löst behandelt das Lesen der Markierungen.
Wie überprüfe ich einen Rebase vor dem Pushen?
Vergleichen Sie die alte Serie mit der neuen, bevor es jemand anderes sieht:
# old and new commits, matched pair by pair
git range-diff origin/main topic-backup topic
# everything the branch adds to main, as one diff
git diff origin/main...topic
# the shape of the history
git log --graph --oneline --decorate origin/main topicgit range-diff zeigt an, wann eine Konfliktlösung einen Patch geändert hat oder wann ein Commit verloren gegangen ist. Code, der kompiliert wird, kann immer noch einen abgebrochenen Test oder eine geänderte Bedingung verbergen, und hier erkennt man es.
Wie mache ich einen Rebase rückgängig?
Verwenden Sie während der Ausführung git rebase --abort. Wenn es fertig ist, bewegen Sie den Ast zurück zur alten Spitze. Überprüfen Sie zuerst git status, da --hard nicht committete Änderungen verwirft:
git reset --hard topic-backup
# no backup? find the old tip in the reflog
git reflog show topic
git reset --hard <old-tip-hash>Die Anleitung zum Rückgängigmachen eines Zurücksetzens, Rebases oder Commits behandelt das Reflog ausführlicher.
Wie pushe ich einen Zweig nach dem Rebase?
Ein normaler Push wird abgelehnt, da der Remote-Zweig noch die alten Commits enthält und Git ein nicht schnelles Update sieht. Überprüfen Sie, was Sie ersetzen möchten, und schließen Sie dann einen Leasingvertrag ab:
git fetch origin
git log --oneline topic..origin/topic
git push --force-with-lease origin topicDas git log sollte nur Ihre alten Commits auflisten. Alles andere ist die Arbeit eines Teamkollegen, also halten Sie inne und bringen Sie es zuerst ein. --force-with-lease ersetzt den Remote-Zweig nur, wenn er sich immer noch dort befindet, wo Sie ihn beim letzten Abruf gesehen haben, und einfach --force keine solche Prüfung hat. Hintergrundabrufe aktualisieren diesen Wert, sodass Skripte den erwarteten Commit benennen können: git push --force-with-lease=topic:<expected-hash> origin topic.
Sollte ich diesen Zweig umbasieren oder zusammenführen?
| Situation | Benutzen | Warum |
|---|---|---|
| Ihr eigener kurzlebiger Themenzweig | Rebase | Ein direkter Verlauf, der Commit für Commit liest. |
| Ein Zweig, den andere abgerufen oder aufgebaut haben | Zusammenführen | Es schreibt nichts um, sodass niemand seine Arbeit reparieren muss. |
| Ein langlebiger Integrationszweig | Zusammenführen | Es führt die Aufzeichnung beider Entwicklungslinien. |
| Ein Zweig, die überprüft wird | Rebase, sobald die Rezensenten zustimmen | Kommentare können auf Commits verweisen, die sich bald ändern. |
So rebasieren Sie einen Zweig in GitTree
Wählen Sie die neue Basis
Schauen Sie sich Ihren Zweig an, klicken Sie mit der rechten Maustaste auf den Zweig, auf dem Ihre Arbeit liegen soll, z. B.
develop, und wählen Sie Rebase … onto ….Überprüfen Sie die Optionen
Die Bestätigung besagt, dass jeder Commit mit einer neuen ID wiederholt wird und der alte Zweig beibehalten wird. Sie können auch lokale Änderungen speichern und zurücksetzen.
Befolgen Sie jeden Schritt
Ein Banner zeigt Rebasing … onto …, step … of …. Wenn bei einem Schritt ein Konflikt auftritt, werden mit Resolve die Dateien geöffnet, mit Continue fortgefahren, mit Skip das Commit gelöscht und mit Abort… wird der Zweig wieder in den ursprünglichen Zustand versetzt.
Überprüfen Sie, was sich geändert hat
What Changed… (
Alt+D) vergleicht die Commits vor und nach dem Rebase, Paar für Paar, wiegit range-diff.Pushen oder rückgängig machen
Verwenden Sie Force Push (With Lease)… für einen Zweig, der sich bereits auf dem Remote befindet. Undo setzt den Zweig an seinen ursprünglichen Standort zurück und die alten Commits bleiben unter
refs/ogt/trasherhalten.

Die Anleitung zum Neubasieren eines Zweigs enthält alle Optionen, und Push mit Lease erzwingen deckt den Push ab. Um unterwegs zu squashen, umzuformulieren oder neu zu ordnen, lesen Sie interaktives Rebase in einer GUI.

Häufig gestellte Fragen
Verliert Git Rebase Änderungen?
Nicht von alleine. Git spielt Ihre Änderungen in neue Commits ab. Die Arbeit verschwindet, wenn Sie einen Commit abbrechen, git rebase --skip ausführen oder einen Konflikt falsch lösen. Git lässt auch Commits aus, deren Änderungen bereits im Upstream vorliegen.
Was ist der Unterschied zwischen git rebase --abort und dem Reflog?
git rebase --abort funktioniert nur, während ein Rebase ausgeführt wird. Nach Abschluss enthält das Reflog die früheren Tipps des Zweigs, sodass Sie auf einen davon zurücksetzen können.
Kann ich einen Zweig, der Merge-Commits enthält, neu basieren?
Ja. git rebase --rebase-merges origin/main behält sie. Ohne diese Option glättet Git den Zweig und lässt Merge-Commits weg.
Warum schlägt Git Push nach einem Rebase fehl?
Der Remote-Zweig verfügt noch über die alten Commits, die Ihr neu geschriebener Zweig nicht enthält. Überprüfen Sie sie und verwenden Sie dann git push --force-with-lease origin topic.
Sollte ich auf main oder origin/main umsteigen?
Verwenden Sie origin/main nach git fetch origin. Es handelt sich um den neuesten veröffentlichten Stand und Sie müssen nicht zuerst Ihr lokales main aktualisieren.
Quellen
Behauptungen zu anderen Produkten wurden anhand der offiziellen Seiten auf 7. November 2026 überprüft. Preise und Ausstattung ändern sich; Die Seiten der Anbieter sind die Quelle der Wahrheit.
