Git setzt die aktuelle Rebase zurück

Lesezeit: 3 Minuten

Benutzeravatar von Puppy
Hündchen

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?

Benutzeravatar von Ravi Shrivastava
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

Benutzeravatar von alextercete
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):

  1. Es gibt einen Konflikt während der Rebase
  2. Ich vermassele die Konfliktlösung
  3. 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
    
  4. Ich kopiere die Zeile für den Befehl, den die Rebase gerade ausführt: pick db2511c Modify file
  5. ich renne git rebase --edit-todo und fügen Sie die Zeile oben in der Datei ein
  6. ich renne git rebase --skip

Benutzeravatar von Pierre-Luc Carmel Biron
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.

Benutzeravatar von Felipe CS
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:

git cherry-pick -n b10b228e263dfa223221036fa17506445a101f0f

1439330cookie-checkGit setzt die aktuelle Rebase zurück

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy