如何修复“腐败”;交互式变基?

我设法在本地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。

159855 次浏览

看起来Git试图删除.git/rebase-merge目录,但无法完全删除它。你试过复制那个文件夹吗?如果存在.git/rebase-apply文件夹,也要复制掉它。

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

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

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

从Git Bash执行撤退,放弃对我有用。

我也有同样的问题。我使用进程资源管理器建议在其他帖子(我无法找到那篇文章),并找出哪个进程有一个锁的文件,并杀死它。然后根据需要执行——continue或——abort

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

最终,我发现“Rebase…”菜单项被临时转换为一个子菜单。

>小队->小队-取消

这对我很管用。

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

安装进程浏览器:https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

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

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

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

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

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

touch .git/rebase-merge/head-name

然后使用git rebase

就我而言,这是因为我在各自的Git项目中打开了SmartGit的Log,在各自的项目目录中打开了Total Commander。当我关闭了两个,我能够重新基地没有任何问题。

我想得越多,我就越怀疑Total Commander,即Windows有一个锁在git rebase打开的目录上。

友好的建议:当你试图修复某些东西时,每次只做一个改变。;)

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

我正在使用git version 2.19.2.windows.1

唯一对我有用的是删除.git/rebase-apply/目录并执行git reset --hard

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

在我的例子中,8 git rebase --abortgit rebase --continue正在抛出:

错误:无法读取。git/rebase-apply/head-name':没有这样的文件或目录

我设法通过手动删除:.git\rebase-apply目录来解决这个问题。

我被困住了。我创建了head-name文件,然后我遇到了另一个错误,说它无法找到onto文件,所以我创建了那个文件。然后我得到另一个错误说无法读取'。git/rebase-apply/onto':没有这样的文件或目录。

我查看了git 文档的重基,并发现了另一个命令:

git rebase --quit

这让我回到了我的分支上,没有任何变化,我可以重新开始我的rebase,就像新的一样。

在Windows上使用SublimeText 3,这个问题可以通过关闭Sublime窗口来解决。

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

谢谢劳拉·斯洛克姆的回答

我把事情搞砸了,而重新建立和得到一个分离的头部

 error: could not read orig-head

这让我无法完成调整。

分离的HEAD似乎准确地包含了我正确的rebase期望状态,所以我运行了

rebase --quit

在那之后,我检查了一个新的临时分支,将它绑定到分离的头部。

通过将它与我想要重基的分支进行比较,我可以看到新的临时分支恰好处于我想要达到的状态。 由于< / p >

如果你降到状态以下,再变基就不管用了,

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

第一次运行,

$ git rebase -quit

然后从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

使用,

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

我有一个提交运行在我的VSCode,使它卡住。杀死VS Code进程,并恢复(R)到rebase。帮我修好了。