Git Commit während Git Rebase - was passiert wirklich?

9

Ich bin auf der Suche nach einer guten Beschreibung dessen, was passiert, wenn man während der Rebase festlegt und wie man das auf einfache Weise "rückgängig machen" kann.

Betrachten wir ein Szenario, in dem ein großer Commit rebasiert wird. Während der Rebase tritt ein Konflikt auf und der Benutzer beginnt mit dem Zusammenführen von Änderungen. Stellen Sie sich nun ein Szenario vor, in dem Sie fast fertig waren, aber Sie haben git rebase --continue - aus welchem ​​Grund auch immer (sei es langes Wochenende oder so) nicht aufgerufen. Die nächste Woche hast du gerade wieder angefangen zu arbeiten, während der Rebase. Schließlich rufen Sie git commit --amend auf, um die Änderungen an das letzte Commit anzuhängen und ... enden in dem Commit, in das Sie rebasieren.

Natürlich können Sie immer das Commit auschecken, von dem Sie angefangen haben, sich neu zu verlinken und "hack your through" - sagen Sie zum Beispiel, indem Sie versuchen, alle Dateien von Ihrer Änderung zu kopieren, aber das könnte die Änderungen fallen lassen Inzwischen.

Gibt es eine saubere, gute Möglichkeit, das zu beheben? Dies ist ein besonderer Zustand, in dem ich vorsichtig sein sollte und ich möchte nie darin enden, aber es kommt immer noch gelegentlich vor - und am Ende verbringe ich einen ganzen Tag damit, die Dinge in Ordnung zu bringen.

Ich würde wirklich alle Hilfe und Vorschläge schätzen. Danke!

    
Tomasz W 20.06.2012, 09:29
quelle

1 Antwort

4

Es gibt zwei Lösungsvorschläge für diese Situation.

  • Die erste Lösung besteht darin, das endgültige Ergebnis auf das ursprüngliche Basis-Commit zurückzusetzen. Dies würde erfordern, dass Sie ähnliche Zusammenführungskonflikte noch einmal lösen müssen, aber wenn Sie fertig sind, sollte Ihr Commit wieder auf dem richtigen Weg sein.

  • Alternative Lösung, die für mich funktionierte, war, den gleichen Punkt abzuzweigen, wie der Commit, den Sie empfohlen haben (er trägt den SHA, der als Checkout-Basis verwendet werden sollte). Erstellen Sie dann einen neuen Zweig und rufen Sie git merge --no-ff --no-commit --strategy=theirs other_branch auf, wobei * other_branch * derjenige mit unglücklichem Commit ist.

Tomasz W 02.08.2012, 11:58
quelle