Ich habe eine Rebase durchgeführt. Ich habe daran gearbeitet, einige Konflikte zu lösen, aber am Ende bin ich in die falsche Richtung gegangen, und jetzt möchte ich einfach wieder anfangen, diese Konflikte zu lösen.
Ich möchte den Rebase zurücksetzen, sodass ich immer noch den aktuellen Commit rebasiere, aber die Arbeitskopie auf den Zeitpunkt zurückgesetzt wurde, als der Commit überhaupt mit Konflikten gekennzeichnet wurde.
Wie kann ich eine Rebase auf den aktuellen Commit zurücksetzen?
Ravi Shrivastava
Wenn Sie sich zwischen Ihrer Rebase befinden, können Sie dies tun
git rebase --abort
Das würde das gesamte Rebase abbrechen, anstatt nur dieses eine Commit zu rebasen.
– Hündchen
8. Februar 2016 um 10:18 Uhr
alextercete
Wenn Sie nur eine Zusammenführung für eine bestimmte Datei wiederholen möchten, brauchen Sie nur Folgendes zu tun:
git checkout -m <file>
Wenn Sie den gesamten Commit wiederholen möchten, gehe ich wie folgt vor (es gibt wahrscheinlich einen besseren Weg, dies zu tun):
Es gibt einen Konflikt während der Rebase
Ich vermassele die Konfliktlösung
Ich laufe ein git status was mir ab Git 2.0.0 so etwas gibt (nur wenn Sie eine interaktive Rebase durchführen):
interactive rebase in progress; onto 14ed389
Last command done (1 command done):
pick db2511c Modify file
Next command to do (1 remaining command):
pick d1c2037 Modify file one more time
(use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'other' on '14ed389'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: file.txt
Ich kopiere die Zeile für den Befehl, den die Rebase gerade ausführt: pick db2511c Modify file
ich renne git rebase --edit-todo und fügen Sie die Zeile oben in der Datei ein
ich renne git rebase --skip
Pierre-Luc Carmel Biron
Räumen Sie zuerst das Chaos auf:
git reset --hard HEAD
Wählen Sie dann den Commit aus, den Sie gerade rebasen:
git cherry-pick -n `git rev-parse REBASE_HEAD`
Das ist es. Wie üblich können Sie die Rebase fortsetzen, nachdem Sie Konflikte behoben haben.
Dies ermöglicht Ihnen im Grunde, die aktuelle Rebase-Phase neu zu starten, großartig!
– Mitchell McKenna
22. April 2021 um 0:30 Uhr
Wenn Sie dies oft tun (wie ich 😅), können Sie einen nützlichen Git-Alias erstellen (basierend auf Pierres eleganter Antwort).
[alias]
# Restart the current rebase step if you accidentally messed it up
# SEE: https://stackoverflow.com/a/53141807/625710
restart-rebase-step = !git reset --hard HEAD && git cherry-pick -n `git rev-parse REBASE_HEAD`
Sie können es dann von der Befehlszeile aus aufrufen:
git restart-rebase-step
Wenn Sie mehrere Commits hatten, bei denen dieselben Dateien in beiden Zweigen bearbeitet wurden, und während der Rebasierung entschieden haben, dass Sie etwas Arbeit bewahren möchten, nicht alle bereits vorgenommenen Änderungen verwerfen (git rebase --abort) dann müssen Sie wohl in das Verzeichnis schauen .git/rebase-apply und prüfe patch Datei. Es enthält alle Änderungen, die während des Rebasings vorgenommen wurden. Sie würden diesen Patch danach manuell anwenden git rebase --abort.
Philipp C.S
Um die elstgav-Auflösung ohne den Alias zu verwenden, führen Sie zuerst den Reset durch:
git reset --hard HEAD
Holen Sie sich dann den SHA1 der Rebase:
rev-parse REBASE_HEAD
b10b228e263dfa223221036fa17506445a101f0f // this is the SHA1 value
Verwenden Sie danach den SHA1-Wert mit dem cherry-pick Befehl: