我设法在本地git存储库中创建了一个小混乱。我试图通过使用以下说明修复一个损坏的提交。在运行“git commit -amend”之前(在git rebase -interactive之后),我决定我的更改是不正确的,所以我执行了“git reset HEAD -hard”。我告诉你,这不是个好主意。

现在交互性的调整似乎被“卡住”了。Git将当前分支显示为(|REBASE-m)。每个命令(cd .., ls, git rebase…)在我的存储库中给出以下错误:

cat: .git/rebase-merge/head-name:没有这样的文件或目录

以下是git rebase -abort的样子:

$ 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

以下是git rebase的结果——继续:

$ 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

什么好主意吗?我想把情况重置到我开始我深思熟虑的基地重建行动之前的状态。

以下是git log - online如何显示这种情况:

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

这很好。

我使用的是msysgit v1.7.0.2。


当前回答

由于僵尸vim.exe进程,我遇到了类似的问题。 在任务管理器中杀死它,然后是git rebase -abort修复了它。

其他回答

尝试了所有其他方法,但重新启动,对我有效的是rm -fr .git/REBASE_HEAD

在Windows上,如果您不愿意或无法重新启动机器,请参阅下面。

安装进程资源管理器:https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

在进程资源管理器中查找>文件句柄或DLL…

输入错误中提到的文件名(对于我的错误,它是'git-rebase-todo',但在上面的问题中,是'done')。

进程资源管理器将突出显示对文件持有锁的进程(对我来说是'grep')。

杀死进程,您将能够以标准方式中止git操作。

一旦你满意地完成了X次提交的重基,最后一个命令必须是git rebase—continue。这将完成流程并退出rebase模式。

在我的情况下,在测试所有这些选项后,仍然有问题,我尝试了sudo git rebase -abort,它做了整个事情

我已经尝试了上面提到的所有步骤,但没有一个对我有效。最后,重新启动计算机解决了这个问题:D