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

Git “如何修复”;“腐败”;交互式重基?,git,msysgit,git-rebase,Git,Msysgit,Git Rebase,我设法在本地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存储库中创建了一个小混乱。我试图通过使用。在运行“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
文件夹,请将其复制掉。

由于zombie vim.exe进程,我遇到了类似的问题。
在任务管理器中终止它,然后执行一个
git-rebase--abort
修复它。

一旦您满意地完成了对X个提交数的重新设置,最后一个命令必须是
git-rebase--continue
。这就完成了这个过程并退出了重基模式。

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


从git Bash执行git rebase--abort对我来说很有效。

我也遇到了同样的问题。我按照其他帖子中的建议使用了process explorer(我找不到该帖子),找出了哪个进程锁定了文件并将其杀死。然后根据需要执行--continue或--abort

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

最后,我发现“重新设置基础…”菜单项临时转换为子菜单

团队->重新基地->中止


这对我很有用。

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

安装Process Explorer:

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

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

Process Explorer将突出显示持有文件锁的进程(对我来说是“grep”)


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

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

touch .git/rebase-merge/head-name

在我的例子中,使用git rebase是因为我在各自的git项目中打开了SmartGit的日志,在各自的项目目录中打开了Total Commander。当我关闭两者时,我能够毫无问题地重新设置基址

我想得越多,我就越怀疑Total Commander,也就是说,Windows在git rebase试图使用的打开的目录上有一个锁


友好的建议:当你试图修复某件事时,总是一次做一个改变

在我的例子中,在测试了所有这些选项后仍然存在问题,我尝试了
sudogit-rebase--abort
,它完成了整个过程我使用的是
git版本2.19.2.windows.1


对我来说唯一有效的方法就是删除
.git/rebase apply/
目录,然后执行
git重置--hard

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

在我的例子中,r
git-rebase--abort
git-rebase--continue
抛出:

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


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

我陷入了这个困境。我创建了head name文件,然后我遇到另一个错误,说它找不到to文件,所以我创建了该文件。然后,我得到另一个错误,说无法读取“.git/rebase apply/on”:没有这样的文件或目录

因此,我查看了git的重定基址,发现了另一个命令:

git rebase --quit

这使我回到了我的分支上,没有任何更改,我可以重新启动我的重新基础,就像新的一样。

在Windows上使用SublimitText 3,只需关闭用于交互式提交版本的Sublimite窗口即可解决问题。

尝试了除重新启动以外的所有操作,对我有用的是
rm-fr.git/REBASE\u HEAD
谢谢@Laura Slocum的回答

我在重定基调的时候把事情搞砸了,结果脑袋脱落了

 error: could not read orig-head
这使我无法完成重定基

分离的头部似乎正好包含我正确的rebase期望状态,所以我跑了

rebase --quit
之后,我检查了一个新的临时分支,将其绑定到分离的头部

通过将其与我想要重设基础的分支进行比较,我可以看到新的临时分支正处于我想要达到的状态。
如果您的状态低于状态,并且重新设置基础不再起作用,谢谢

$ 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

这对我来说是有效的,并且将对OP发布的内容起作用(根本不去的重定基线错误):


我找到了这块宝石。

谢谢你指出这一点。我只需重新启动电脑就可以解决我的问题。我不确定出了什么问题,因为每次访问.git\rebase合并文件夹都会导致“访问被拒绝”—错误。重新启动对我不起作用,但是
git-rebase--abort
(from)确实起作用。只需重新启动git shell(windows)对我起作用(
git-rebase--abort
不起作用)一句警告。。。当我注意到已损坏的重基错误时,我在工作目录上做了4个小时的更改。尝试了git rebase--abort
brew update-reset
brew update