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 – >中止
它为我工作。