Git – 如何修复“损坏的”交互式底图?

我设法在我的本地git仓库中创build一个小混乱。 我试图通过使用以下说明修复一个损坏的提交。 在运行“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 –oneline显示情况的方法:

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

这很好。

我正在使用msysgit v1.7.0.2。

它看起来像Git试图删除.git/rebase-merge目录,但无法完全删除它。 你有没有尝试复制该文件夹? 如果存在,也拷贝掉.git/rebase-apply文件夹。

我有一个类似的问题,由于僵尸vim.exe进程。 杀死它在任务pipe理器,后面一个git rebase --abort修复它。

在Eclipse中也有同样的问题。 无法重置=>从Eclipse中止。

从Git Bash执行git rebase –abort为我工作。

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

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

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

input错误中提到的文件名(因为我的错误是'git-rebase-todo',但是在上面的问题中,'done')。

进程资源pipe理器将突出显示进程locking该文件(对我来说这是'grep')。

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

用这个名字创build一个文件:

 touch .git/rebase-merge/head-name 

而不是使用git rebase

在我的情况,这是因为我打开SmartGit的login各自的项目目录中的各自的Git项目和总指挥官。 当我closures两个时,我能够没有任何问题地rebase。

我想到的越多,我越怀疑总指挥官,即Windows有一个锁打开的目录git rebase正在尝试的东西。

友好的build议:当您尝试修复某些问题时,请务必一次更改。 ;)

一旦你圆满完成重新绑定X次提交,最后的命令必须是git rebase --continue 。 这样就完成了这个过程,退出了rebase模式。

我有同样的问题。 我用其他职位(我无法find该post)build议使用进程资源pipe理器,并找出哪个进程locking该文件,并杀死它。 然后根据需要执行–continue或–abort

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

我在eclipse中使用git,并且遇到同样的问题。

最终我发现“Rebase …”菜单项暂时被转换成子菜单。

Team-> Rebase – >中止

它为我工作。