Git - How to fix "corrupted" interactive rebase?

Mik*_*nen 124 git msysgit git-rebase

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.

现在,交互式基础似乎被"卡住了".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
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我希望将情况重新恢复到我开始我精心设计的rebase操作之前的状态.

以下是git log --oneline如何显示情况:

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script
Run Code Online (Sandbox Code Playgroud)

这很好.

我正在使用msysgit v1.7.0.2.

Mar*_*wen 118

看起来Git试图删除.git/rebase-merge目录,但无法完全删除它.您是否尝试过复制该文件夹?.git/rebase-apply如果存在,还要复制文件夹.

  • 重新启动或`git rebase --abort`仍然给了我错误。git rebase --quit为我工作。 (61认同)
  • 重启不适合我,但`git rebase --abort`(来自http://stackoverflow.com/a/4757777/146044)_did_ work. (17认同)
  • `git rebase --quit` 对我有用,但我丢失了所有自动保存的更改,例如 @GeorgeAnandaEman => 通过使用 /sf/ask/2649205961/ 中的答案可以恢复它们-get-a-lost-autostash-commit-from-git-rebase-autostash 解释如何查看所有自动存储提交 (8认同)
  • 感谢您指出了这一点.我只是通过重新启动计算机来解决我的问题.我不确定出了什么问题,因为不知怎的,每次访问.git\rebase-merge文件夹都会导致"拒绝访问" - 错误. (7认同)
  • 只是重新启动git shell(windows)对我有用(`git rebase --abort`不起作用) (2认同)
  • 提醒一下...当我注意到损坏的rebase错误时,我在工作目录上进行了4个小时的更改。尝试了`git rebase --abort`它抹掉了我未分级的更改...尽管错误确实消失了 (2认同)

小智 91

我陷入了困境。我创建了名字文件,然后遇到另一个错误,说找不到文件,因此我创建了该文件。然后我又收到另一个错误消息,提示无法读取“ .git / rebase-apply / onto”:没有这样的文件或目录。

因此,我查看了git 文档进行基础调整,发现了另一个名为的命令git rebase --quit。这使我回到了分支,没有任何变化,我可以重新开始重新配置,就像新的一样。

  • git rebase --quit是吗! (18认同)
  • 已投赞成票。`git rebase --quit` 绝对救了我。与描述的症状相同,但我的症状是在尝试执行“git pull --rebase”后出现的,但由于某种原因失败了。请注意,我启用了 autostash(git 版本 2.27.0.windows.1)并同时运行 VS2019(指向该存储库) - 怀疑这些的某些组合弄乱了它。 (4认同)
  • 我有类似的与变基相关的错误,只是错误消息不同。尝试:`$ git rebase --abort`输出:`错误:无法读取'.git/rebase-apply/head-name':没有这样的文件或目录`最后,这个解决方案解决了我的问题:`git rebase --退出` (3认同)
  • 谢谢!这个固定的地雷! (2认同)
  • `--quit`标志FTW (2认同)
  • `--quit`起作用了。`--abort`并不是因为重新设置被取消了一半 (2认同)

小智 88

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


Rut*_*uth 18

感谢@Laura Slocum的回答

我在重新定基础时搞砸了,并得到了一个带有

 error: could not read orig-head
Run Code Online (Sandbox Code Playgroud)

这使我无法完成变基。

分离的HEAD似乎恰好包含我正确的重新设定所需的状态,所以我跑了

rebase --quit
Run Code Online (Sandbox Code Playgroud)

然后,我签出了一个新的临时分支,将其绑定到分离的头上。

通过将其与要重新设置基准的分支进行比较,可以看到新的temp分支恰好处于我想要达到的状态。谢谢


Pra*_*ath 7

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

从Git Bash 执行git rebase --abort为我工作.


Dar*_*ats 7

在Windows上,如果您不愿意或无法重新启动计算机,请参阅下文.

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

在Process Explorer中,查找>文件句柄或DLL ...

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

Process Explorer将突出显示锁定文件的进程(对我而言,它是'grep').

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


Dar*_*usz 6

就我而言,八个git rebase --abortgit rebase --continue正在抛出:

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

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


小智 5

创建一个具有以下名称的文件:

touch .git/rebase-merge/head-name
Run Code Online (Sandbox Code Playgroud)

比使用 git rebase