it-swarm.com.de

Git - Wie "beschädigte" interaktive Rebase beheben?

In meinem lokalen Git-Repository konnte ich ein bisschen Chaos erzeugen. Ich habe versucht, ein defektes Commit zu korrigieren, indem ich die Anweisungen befolge. . Vor dem Ausführen des "git commit - amend" (und nach dem git rebase --interactive) entschied ich, dass meine Änderungen falsch waren, und führte daher "git reset HEAD --hard" aus. Keine gute Idee, sage ich dir.

Nun scheint die interaktive Rebase "festgefahren" zu sein. Git zeigt den aktuellen Zweig als (| REBASE-m). Jeder Befehl (cd .., ls, git rebase ...) in meinem Repository gibt den folgenden Fehler aus:

cat: .git/rebase-merge/Kopfname: Keine solche Datei oder Verzeichnis

So sieht git rebase --abort aus:

$ git rebase --abort
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory
HEAD is now at 4c737fb Revert "Modified file names"
rm: cannot remove `c:/_work/project/src/git/.git/rebase-merge/done': Permission denied
rm: cannot remove directory `c:/_work/project/src/git/.git/rebase-merge': Directory
not empty
cat: .git/rebase-merge/head-name: No such file or directory

Hier ist das Ergebnis von git rebase --continue:

$ git rebase --continue
cat: c:/_work/project/src/git/.git/rebase-merge/prev_head: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/end: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/msgnum: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/onto: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
prev_head must be defined
cat: .git/rebase-merge/head-name: No such file or directory

Irgendwelche Ideen? Ich möchte die Situation auf den Zustand zurücksetzen, den ich vor meiner gut durchdachten Rebase-Operation hatte.

So zeigt Git Logonline die Situation an:

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script

Und das ist gut so. 

Ich verwende msysgit v1.7.0.2.

71
Mikael Koskinen

Es sieht so aus, als hätte Git versucht, das .git/rebase-merge-Verzeichnis zu entfernen, konnte es jedoch nicht vollständig entfernen. Haben Sie versucht, diesen Ordner zu kopieren? Kopieren Sie auch den .git/rebase-apply-Ordner, falls vorhanden.

68
Martin Owen

Ich hatte ein ähnliches Problem aufgrund eines Zombie-vim.exe-Prozesses. Das Töten im Task-Manager, gefolgt von einem git rebase --abort, wurde behoben.

83
user584317

Hatte dasselbe Problem in Eclipse. Rebase nicht möglich => Abbruch von Eclipse.

git rebase --abort von Git Bash ausführen Hat für mich gearbeitet.

7

Wenn Sie den Computer unter Windows nicht neu starten möchten oder können, siehe unten.

Installieren Sie den Process Explorer: https://technet.Microsoft.com/en-us/sysinternals/bb896653.aspx

Suchen Sie im Prozess-Explorer auf Suchen> Dateihandle oder DLL ...

Geben Sie den im Fehler genannten Dateinamen ein (für meinen Fehler war es "git-rebase-todo", aber in der obigen Frage "done").

Process Explorer hebt den Prozess hervor, der eine Sperre für die Datei enthält (für mich war es 'grep').

Beenden Sie den Vorgang und Sie können die Git-Aktion auf normale Weise abbrechen.

6
Darren Yeats

Erstellen Sie eine Datei mit diesem Namen:

touch .git/rebase-merge/head-name

und dann git rebase verwenden 

3
Tehila Dabush

Danke @Laura Slocum für deine Antwort

Ich habe die Dinge beim Umbasieren durcheinander gebracht und einen abgetrennten HEAD mit einem

 error: could not read orig-head

das hinderte mich daran, den Umbau abzuschließen.

Das abgetrennte HEAD scheint genau meinen richtigen Rebase-Wunschzustand zu enthalten, also bin ich gelaufen

rebase --quit

und danach habe ich einen neuen temporären Zweig ausgecheckt, um ihn an den abgenommenen Kopf zu binden.

Wenn ich es mit dem Zweig vergleiche, den ich zurücksetzen wollte, sehe ich, dass der neue temporäre Zweig genau in dem Zustand ist, den ich erreichen wollte. Vielen Dank

3
Ruth

In meinem Fall warf echter git rebase --abort und git rebase --continue:

fehler: '.git/rebase-apply/head-name' konnte nicht gelesen werden: Keine solche Datei oder Verzeichnis

Es ist mir gelungen, dieses Problem durch manuelles Entfernen des .git\rebase-apply-Verzeichnisses zu beheben.

2
Dariusz

In meinem Fall lag es daran, dass ich SmartGit's Log im jeweiligen Git-Projekt und Total Commander im jeweiligen Projektverzeichnis geöffnet hatte. Als ich beide geschlossen habe, konnte ich mich problemlos wieder erheben.

Je mehr ich darüber nachdenke, desto mehr vermute ich Total Commander, d. H. Windows hatte eine Sperre für das geöffnete Verzeichnis, mit dem der Git Rebase etwas versuchte.

Freundlicher Tipp: Wenn Sie versuchen, etwas zu beheben, ändern Sie immer eine Änderung. ;)

1
meridius

Mit Sublime Text 3 unter Windows wird das Problem behoben, indem nur die Sublime-Fenster geschlossen werden, die für die interaktive Commit-Edition verwendet werden.

1
LeBorgne

Nachdem Sie die X-Anzahl der Commits zufriedenstellend abgeschlossen haben, muss der letzte Befehl git rebase --continue sein. Damit ist der Vorgang abgeschlossen und der Rebase-Modus verlassen.

0
diptia

Ich benutze git version 2.19.2.windows.1.

das einzige, was für mich funktionierte, war, das .git/rebase-apply/-Verzeichnis zu entfernen und einen git reset --hard auszuführen.

0
Spongman

Ich habe alle oben genannten Schritte ausprobiert, aber nichts hat für mich funktioniert. Schließlich restarting funktionierte der Computer für dieses Problem: D

0
Mohammed Asif

Ich bin festgefahren. Ich habe die Datei mit dem Kopfnamen erstellt, und dann bin ich auf einen anderen Fehler gestoßen, der besagt, dass die Datei nicht gefunden werden konnte, also habe ich diese Datei erstellt. Dann bekam ich eine weitere Fehlermeldung, dass '.git/rebase-apply/auf' nicht gelesen werden konnte: Keine solche Datei oder ein solches Verzeichnis.

Also Ich habe mir das git documentation für die Umbasierung angesehen und einen anderen Befehl namens git rebase --quit gefunden. Dies brachte mich ohne Änderungen wieder auf meinen Zweig zurück, und ich konnte meine Neubewertung erneut beginnen, so gut wie neu.

0
Laura Slocum

Ich hatte das gleiche Problem. Ich habe den Prozess-Explorer wie in einem anderen Beitrag vorgeschlagen verwendet (ich kann diesen Beitrag nicht finden) und habe herausgefunden, welcher Prozess die Datei blockiert und sie beendet. Führen Sie dann --continue oder --abort nach Bedarf aus

0
user3739537

habe alles andere als einen Neustart versucht, was bei mir funktioniert hat ist rm -fr .git/REBASE_HEAD

0
Jeremy Vaught

Nachdem ich all diese Optionen getestet hatte und immer noch Probleme hatte, versuchte ich Sudo git rebase --abort und es tat alles

0
Dani.Rangelov