Git School · FluxGit

Commit auf dem falschen Branch: sicher verschieben

FluxGit ·

Die Blöcke sind verschiedene Fälle, kein Gesamtskript. Wähle den passenden Fall. Branchnamen, Pfade und VERIFIED_COMMIT vor Nutzung ersetzen. Abbruchbefehle gelten nur für ihre laufende Operation; nicht beide Alternativen ausführen.

Kurzantwort

Nach einem Commit auf dem falschen Branch sichere zunächst eine Referenz darauf. Übertrage die Änderung per cherry-pick auf den Zielbranch und prüfe das Ergebnis. Korrigiere erst danach den Ursprung: reset kann für eine private Spitze passen; ein geteilter Branch braucht meist revert. Das sind zwei getrennte Entscheidungen.

Beispiel und Voraussetzungen

Das Beispiel beginnt mit einem gewöhnlichen Commit ohne Merge an der Spitze von main, der auf den vorhandenen Branch feature/fix gehört. Das Arbeitsverzeichnis ist sauber. Ersetze die Namen durch deine eigenen. Bei mehreren Commits, einem Merge oder späterer Arbeit zuerst den genauen Bereich bestimmen, statt diesen Reset unverändert zu übernehmen.

Vor Änderungen prüfen

Lies Status, aktuellen Branch und Graph. Prüfe Dateien und Patch, nicht nur die Nachricht: Ein Commit kann mehrere Aufgaben enthalten. Speichere seine vollständige ID in SCHOOL_MISTAKE, damit sie nach dem Branchwechsel eindeutig bleibt. Kläre, ob andere diesen Verlauf bereits erhalten haben, bevor du main korrigierst.

git status --short
git branch --show-current
git log -5 --oneline --decorate
git show --stat HEAD
SCHOOL_MISTAKE=$(git rev-parse HEAD)

Referenz oder getrennten Checkout behalten

Der Rettungsbranch hält das Commit-Objekt erreichbar, kopiert aber keine uncommitteten Änderungen. Sichere und prüfe lokale Arbeit separat: gezielter Commit, geprüfter Stash oder externe Kopie. Stash mit -u umfasst unversionierte, aber keine ignorierten Dateien. Reflog enthält deren ungesicherte Inhalte nicht automatisch.

git branch rescue/wrong-branch "$SCHOOL_MISTAKE"
git show --stat rescue/wrong-branch

Erster Ablauf

Wechsle zum Zielbranch und führe cherry-pick mit der gespeicherten ID aus. Git übernimmt die Änderung und erstellt meist einen neuen Commit mit anderer ID, weil sein Elterncommit anders ist. Prüfe Patch und relevante Projekttests. Entferne das Original erst, wenn die Zieländerung geprüft und die Rettungsreferenz erhalten ist.

git switch feature/fix
git cherry-pick "$SCHOOL_MISTAKE"
git show --stat HEAD

Anderes Ergebnis bewusst wählen

Nur für eine private Spitze: zurück zu main, dann bestätigen, dass HEAD noch SCHOOL_MISTAKE ist. Mit sauberem Arbeitsverzeichnis und Rettungsbranch entfernt reset auf den Elterncommit diesen Commit von main. Hard Reset ersetzt auch versionierte Arbeitsdateien. Ist main weitergezogen oder der Commit geteilt, passt diese genaue Folge nicht mehr.

git switch main
git status --short
git rev-parse HEAD
git reset --hard "${SCHOOL_MISTAKE}^"

Grenzen und Ausnahmen

Bei einem geteilten Branch bevorzuge einen normalen revert dort. Er ergänzt einen umkehrenden Commit, ohne fremden Verlauf zu entfernen. Cherry-pick am Ziel und revert am Ursprung brauchen eigene Prüfungen. Stimme weitere Integrationen ab; diese Anleitung ist kein automatisches Force-Push-Verfahren.

git switch main
git revert "$SCHOOL_MISTAKE"

Konflikte und Aufräumen

Cherry-pick kann bei Konflikten stoppen. Status lesen, passende Dateien lösen und stagen, dann fortsetzen; mit cherry-pick --abort den falschen Vorgang abbrechen. Revert hat eigene Fortsetzungs- und Abbruchbefehle. Ein Abbruch eines laufenden Vorgangs ist kein allgemeines Backup für Änderungen außerhalb davon.

git status
git cherry-pick --abort
git revert --abort

Ergebnis prüfen

Der fertige Graph sollte die Änderung auf feature/fix und die gewählte Korrektur auf main zeigen. Vergleiche beide Patches und prüfe jeden Checkout. Behalte rescue/wrong-branch bis zur abgeschlossenen Prüfung. Ein sauberer Status beweist nicht, dass die Anwendung weiterhin korrekt arbeitet; prüfe das betroffene Verhalten.

git log -6 --oneline --decorate --all
git show --stat feature/fix
git status --short

Häufige Fragen

Mehrere Commits? Reihenfolge, Abhängigkeiten und Bereich prüfen. Reset --soft? Es bewegt die Referenz und erhält Index sowie Dateien, verschiebt allein aber keinen Commit zwischen Branches. Bereits gepusht? Mit dem Revert-Fall für geteilten Verlauf beginnen und eine außergewöhnliche Umschreibung ausdrücklich abstimmen.

Operation in FluxGit prüfen

Prüfe die Operation und die betreffenden Commits mit FluxGits visuellem Verlauf und Patchansicht. Behalte die Prüfungen für Branch, geteilten Verlauf und lokale Dateien aus diesem Beispiel bei. Die Downloadseite zeigt die aktuell verfügbaren Builds und Plattformen.

Offizielle Git-Referenzen

Verwandte Abläufe

FluxGit herunterladen