2010-03-12 6 views
30

Ich habe gerade versucht, einen sehr alten Zweig mit einer kleinen Änderung auf meinem Master zu rebasen. Es gab ein Problem beim Zusammenführen von nur einer der drei beteiligten Dateien, also habe ich einen gedankenlosen --skip gemacht und dachte, dass es diese Datei einfach überspringen würde, aber wie es passiert, scheint es alle meine Änderungen übersprungen zu haben und vorwärts gerollt zu haben . Jetzt ist die Rebase beendet und meine Veränderungen scheinen verschwunden zu sein.Aus versehentlichem Überspringen während der Rebase wiederherstellen

Ich habe die Frage über undoing rebase gesehen, aber es ist alles Griechisch für mich, ich sehe den Reflog, aber ich weiß nicht, welcher Commit der Zweig vor der Rebase angefügt wurde.

In jedem Fall muss ich nicht wirklich die Rebase rückgängig machen, ich will nur in der Lage sein, die Änderungen in den beiden Dateien wiederherzustellen. Gibt es trotzdem etwas, um dies richtig zu machen (wenn ich dies versäumt habe, muss ich nur das gestrige Backup meines Repositories wiederherstellen und die Bits von Hand auswählen).

Antwort

35

Erstellen Sie zunächst einen Tarball Ihres Git Arbeitsordners. Dies macht es einfacher, es mehrmals zu versuchen.

Lässt die folgenden

  • git Kasse ein anderer-old-Zweig
  • git rebase Meister
  • einige Probleme (die Sie übersprungen) passiert nehmen

an dieser Stelle sind Sie jetzt immer noch in einem anderen-alten-Zweig und Ihr Reflog zeigt Ihnen:

6f8348f [email protected]{0}: rebase: <commit message of last commit in another-old-branch> 
e547ec0 [email protected]{1}: checkout: moving from another-old-branch to e547ec0d2a558d189464fc57192066b34ec5f28f^0 
65cedf8 [email protected]{2}: checkout: moving from master to another-old-branch 

Stellen Sie sich vor, dass Verzweigungen wie Symlinks (oder Zeiger) sind, wir müssen nur die Verzweigung "ein anderer-alter-Zweig" auf die alte Commit-ID zeigen lassen. Das alte Commit ist immer noch da und es wurde nicht von deiner Rebase berührt. ein bisschen: ‚Hey git, eine andere alte Zweig ist e547ec0d2, alles andere vergessen, was geschehen‘ hier

In unserem Fall, die e547ec0d2a558d189464fc57192066b34ec5f28f war, also was wir jetzt tun müssen, ist

  • git Kasse another- alt-Zweig # wenn Sie nicht bereits dort
  • git reset --hard e547ec0d2a558d189464fc57192066b34ec5f28f

jetzt Ihre Branche sind wieder normal. Und Sie können Ihre Rebase erneut versuchen.

Bitte beachten Sie, dass Ihr Reflog ist jetzt ein wenig komplizierter als oben Beispiel. aber es sollte immer noch irgendwo da sein ...

viel glück!

+1

Nein, ich muss etwas anderes verschraubt haben, während ich versuche mich zu erholen. Antwort für das nächste Mal markiert ... – Benjol

+8

+1; Ein weiterer Tipp: 'git log -g' kann eine bessere Möglichkeit sein, den Reflog zu durchsuchen. –

+2

Arbeitete wie ein Charme! Habe gerade meinen Morgen gerettet Danke – kmanzana

Verwandte Themen