How to fix "corrupted" interactive rebase?

GitMsysgitGit Rebase

Git Problem Overview


I managed to create a little mess in my local git repository. I was trying to fix a broken commit by using the following instructions. Before running the "git commit --amend" (and after the git rebase --interactive) I decided that my changes were incorrect and so I executed "git reset HEAD --hard". Not a good idea, I tell you.

Now the interactive rebase seems to be "stuck". Git shows the current branch as (|REBASE-m). Every command (cd .., ls, git rebase...) inside my repository gives the following error:

> cat: .git/rebase-merge/head-name: No such file or directory

Here's how git rebase --abort looks like:

$ 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

Here's the result of 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

Any ideas? I would like to reset the situation back to the state it was before I started my well-thought rebase operation.

Here's how git log --oneline shows the situation:

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

And this is fine.

I'm using msysgit v1.7.0.2.

Git Solutions


Solution 1 - Git

I got stuck in this. I created the head-name file, and then I ran into another error saying it couldn't find the onto file, so I created that file. Then I got another error saying could not read '.git/rebase-apply/onto': No such file or directory.

So I looked at the git documentation for rebasing and found another command:

git rebase --quit

This set me back on my branch with no changes, and I could start my rebase over again, good as new.

Solution 2 - Git

It looks like Git tried to remove the .git/rebase-merge directory but wasn't able to remove it completely. Have you tried copying that folder away? Also copy away the .git/rebase-apply folder if that is present.

Solution 3 - Git

I had a similar problem due to a zombie vim.exe process. Killing it in Task Manager, followed by a git rebase --abort fixed it.

Solution 4 - Git

Thanks @Laura Slocum for your answer

I messed things up while rebasing and got a detached HEAD with an

 error: could not read orig-head

that prevented me from finishing the rebasing.

The detached HEAD seem to contain precisely my correct rebase desired state, so I ran

rebase --quit

and after that I checked out a new temp branch to bind it to the detached head.

By comparing it with the branch I wanted to rebase, I can see the new temp branch is exactly in the state I wanted to reach. Thanks

Solution 5 - Git

Had same problem in Eclipse. Could not Rebase=>abort from Eclipse.

Executing git rebase --abort from Git Bash Worked for me.

Solution 6 - Git

On Windows, if you are unwilling or unable to restart the machine see below.

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

In Process Explorer, Find > File Handle or DLL ...

Type in the file name mentioned in the error (for my error it was 'git-rebase-todo' but in the question above, 'done').

Process Explorer will highlight the process holding a lock on the file (for me it was 'grep').

Kill the process and you will be able to abort the git action in the standard way.

Solution 7 - Git

Create a file with this name:

touch .git/rebase-merge/head-name

and than use git rebase

Solution 8 - Git

In my case eighter git rebase --abort and git rebase --continue was throwing:

> error: could not read '.git/rebase-apply/head-name': No such file or directory

I managed to fix this issue by manually removing: .git\rebase-apply directory.

Solution 9 - Git

I'm using git version 2.19.2.windows.1.

the only thing that worked for me was to remove the .git/rebase-apply/ directory and do a git reset --hard.

Solution 10 - Git

In my case it was because I had opened SmartGit's Log in the respective Git project and Total Commander in the respective project directory. When I closed both I was able to rebase without any problem.

The more I think about it, the more I suspect Total Commander, i.e. Windows having a lock on opened directory the git rebase was trying to something with.

Friendly advice: When you try to fix something, always do one change at a time. ;)

Solution 11 - Git

I have tried all the above steps mentioned but nothing worked for me. Finally, restarting the computer worked for this issue :D

Solution 12 - Git

With SublimeText 3 on Windows, the problem is fixed by just closing the Sublime windows used for interactive commit edition.

Solution 13 - Git

If you get below state and rebase does not work anymore,

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

Then first run,

$ git rebase -quit

And then restore previous state from 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

Using,

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

Solution 14 - Git

Once you have satisfactorily completed rebasing X number of commits , the last command must be git rebase --continue . That completes the process and exits out of the rebase mode .

Solution 15 - Git

I had the same problem. I used process explorer as suggested in other post (i am not able to find that post) and figured out which process has a lock on the file and kill it. then execute the --continue or --abort as per needs

Solution 16 - Git

In my case after testing all this options and still having issues i tried sudo git rebase --abort and it did the whole thing

Solution 17 - Git

tried everything else but a reboot, what worked for me is rm -fr .git/REBASE_HEAD

Solution 18 - Git

I am using git in eclipse and I was having the same problem.

Eventually I found that the "Rebase ..." menu entry was temporarily transformed into a sub-menu.

Team-> Rebase -> Abort

It worked for me.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMikael KoskinenView Question on Stackoverflow
Solution 1 - GitLaura SlocumView Answer on Stackoverflow
Solution 2 - GitMartin OwenView Answer on Stackoverflow
Solution 3 - Gituser584317View Answer on Stackoverflow
Solution 4 - GitRuthView Answer on Stackoverflow
Solution 5 - GitPraveen HiremathView Answer on Stackoverflow
Solution 6 - GitDarren YeatsView Answer on Stackoverflow
Solution 7 - GitTehila DabushView Answer on Stackoverflow
Solution 8 - GitDariuszView Answer on Stackoverflow
Solution 9 - GitSpongmanView Answer on Stackoverflow
Solution 10 - GitmeridiusView Answer on Stackoverflow
Solution 11 - GitMohammed AsifView Answer on Stackoverflow
Solution 12 - GitLeBorgneView Answer on Stackoverflow
Solution 13 - GitSazzad Hissain KhanView Answer on Stackoverflow
Solution 14 - GitdiptiaView Answer on Stackoverflow
Solution 15 - Gituser3739537View Answer on Stackoverflow
Solution 16 - GitDani.RangelovView Answer on Stackoverflow
Solution 17 - GitJeremy VaughtView Answer on Stackoverflow
Solution 18 - GitShiva AgrawalView Answer on Stackoverflow