Hoe “beschadigde” interactieve rebase te herstellen?

Het is me gelukt om een ​​beetje rommel te maken in mijn lokale git-repository. Ik probeerde een verbroken commit te herstellen door de volgende instructieste gebruiken. Voordat ik de “git commit –amend” uitvoerde (en na de git rebase –interactive) besloot ik dat mijn wijzigingen onjuist waren en dus voerde ik “git reset HEAD –hard” uit. Geen goed idee, zeg ik je.

Nu lijkt de interactieve rebase “vast te zitten”. Git toont de huidige branch als (|REBASE-m). Elk commando (cd .., ls, git rebase…) in mijn repository geeft de volgende foutmelding:

cat: .git/rebase-merge/head-name: Geen dergelijk bestand of map

Zo ziet git rebase –abort eruit:

$ 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 is het resultaat van 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

Enig idee? Ik wil de situatie terugzetten naar de staat waarin deze was voordat ik aan mijn weloverwogen rebase-operatie begon.

Hier is hoe git log –oneline de situatie laat zien:

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

En dit is prima.

Ik gebruik msysgit v1.7.0.2.


Antwoord 1, autoriteit 100%

Ik ben hierin vastgelopen. Ik heb het head-name-bestand gemaakt en toen kwam ik een andere fout tegen die zei dat het het on-bestand niet kon vinden, dus heb ik dat bestand gemaakt. Toen kreeg ik een anderefoutmelding dat ‘.git/rebase-apply/onto’ niet kon worden gelezen: Geen dergelijk bestand of map.

Dusik keek naar de git documentatievoor rebasen en vond een ander commando:

git rebase --quit

Dit zette me terug op mijn branch zonder veranderingen, en ik kon mijn rebase opnieuw beginnen, zo goed als nieuw.


Antwoord 2, autoriteit 42%

Het lijkt erop dat Git probeerde de map .git/rebase-mergete verwijderen, maar het niet volledig kon verwijderen. Heb je geprobeerd die map weg te kopiëren? Kopieer ook de map .git/rebase-applyweg als die aanwezig is.


Antwoord 3, autoriteit 18%

Ik had een soortgelijk probleem vanwege een zombie vim.exe-proces.
Het doden in Taakbeheer, gevolgd door een git rebase --abortloste het op.


Antwoord 4, autoriteit 8%

Bedankt @Laura Slocum voor je antwoord

Ik heb dingen verknoeid tijdens het rebasen en kreeg een vrijstaande HEAD met een

error: could not read orig-head

waardoor ik het rebasen niet kon voltooien.

Het vrijstaande HEAD lijkt precies mijn juiste rebase gewenste staat te bevatten, dus ik rende

rebase --quit

en daarna heb ik een nieuwe tijdelijke tak uitgecheckt om deze aan het losse hoofd te binden.

Door het te vergelijken met de branch die ik wilde rebasen, kan ik zien dat de nieuwe tijdelijke branch precies in de staat is die ik wilde bereiken.
Bedankt


Antwoord 5

Had hetzelfde probleem in Eclipse. Kon niet opnieuw baseren=>afbreken van Eclipse.

Het uitvoeren van git rebase –abortvanuit Git Bash werkte voor mij.


Antwoord 6

In Windows, als u de machine niet wilt of kunt herstarten, zie hieronder.

Installeer Process Explorer: https://technet.microsoft.com/en- us/sysinternals/bb896653.aspx

Zoek in Process Explorer > Bestandshandle of DLL …

Typ de bestandsnaam in die in de fout wordt genoemd (voor mijn fout was het ‘git-rebase-todo’ maar in de bovenstaande vraag ‘klaar’).

Procesverkenner zal het proces markeren met een slot op het bestand (voor mij was het ‘grep’).

Sluit het proces af en je kunt de git-actie op de standaard manier afbreken.


Antwoord 7

Maak een bestand met deze naam:

touch .git/rebase-merge/head-name

en gebruik dan git rebase


Antwoord 8

In mijn geval gooiden acht git rebase --aborten git rebase --continue:

fout: kon ‘.git/rebase-apply/head-name’ niet lezen: bestand of directory niet aanwezig

Ik heb dit probleem kunnen oplossen door handmatig de directory .git\rebase-applyte verwijderen.


Antwoord 9

Ik gebruik git version 2.19.2.windows.1.

het enige dat voor mij werkte was om de .git/rebase-apply/directory te verwijderen en een git reset --harduit te voeren.


Antwoord 10

In mijn geval was dat omdat ik SmartGit’s Log in het respectievelijke Git-project en Total Commander in de respectievelijke projectdirectory had geopend. Toen ik beide sloot, kon ik zonder enig probleem rebasen.

Hoe meer ik erover nadenk, hoe meer ik Total Commander vermoed, d.w.z. dat Windows een slot heeft op de geopende map waar de git rebase iets mee probeerde.

Vriendelijk advies: wanneer u iets probeert te repareren, voer dan altijd één wijziging tegelijk uit. 😉


Antwoord 11

Ik heb alle bovengenoemde stappen geprobeerd, maar niets werkte voor mij. Ten slotte werkte het herstartenvan de computer voor dit probleem 😀


Antwoord 12

Met SublimeText 3 op Windows is het probleem opgelost door gewoon de Sublime-vensters te sluiten die worden gebruikt voor de interactieve commit-editie.


Antwoord 13

Als je onder staat komt en rebase werkt niet meer,

$ git status
rebase in progress; onto (null)
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

En dan eerst rennen,

$ git rebase -quit

En herstel dan de vorige staat van reflog,

$ git reflog
97f7c6f (HEAD, origin/master, origin/HEAD) HEAD@{0}: pull --rebase: checkout 97f7c6f292d995b2925c2ea036bb4823a856e1aa
4035795 (master) HEAD@{1}: commit (amend): Adding 2nd commit
d16be84 HEAD@{2}: commit (amend): Adding 2nd commit
8577ca8 HEAD@{3}: commit: Adding 2nd commit
3d2088d HEAD@{4}: reset: moving to head~
52eec4a HEAD@{5}: commit: Adding initial commit

Met,

$ git checkout HEAD@{1} #or
$ git checkout master #or
$ git checkout 4035795 #or

Antwoord 14

Zodra je het rebasen van X aantal commits naar tevredenheid hebt voltooid, moet het laatste commando git rebase --continuezijn. Dat voltooit het proces en verlaat de rebase-modus.


Antwoord 15

Ik had hetzelfde probleem. Ik gebruikte procesverkenner zoals gesuggereerd in een ander bericht (ik kan dat bericht niet vinden) en ontdekte welk proces een slot op het bestand heeft en dood het. voer vervolgens de –continue of –abort uit volgens de behoeften


Antwoord 16

In mijn geval, nadat ik al deze opties had getest en nog steeds problemen had, probeerde ik sudo git rebase --aborten het deed het hele ding


Antwoord 17

alles geprobeerd behalve opnieuw opstarten, wat voor mij werkte is rm -fr .git/REBASE_HEAD


Antwoord 18

Dit werkte voor mij en zal werken voor precies wat OP heeft gepost (rebase-fout die gewoon niet gaat):

brew update-reset
brew update

Ik heb dit juweeltje hiergevonden.


Antwoord 19

Ik gebruik git in eclipse en ik had hetzelfde probleem.

Uiteindelijk ontdekte ik dat het menu-item “Rebase …” tijdelijk was omgezet in een submenu.

Team-> Opnieuw baseren -> Afbreken

Het werkte voor mij.

Other episodes