代码之家  ›  专栏  ›  技术社区  ›  Mikael Koskinen

Git-如何修复“损坏的”交互式重新基?

  •  78
  • Mikael Koskinen  · 技术社区  · 14 年前

    我设法在本地git存储库中创建了一个小混乱。我试图通过使用 following instructions . 在运行“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
    

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

    这很好。

    15 回复  |  直到 7 年前
        1
  •  188
  •   Martin Owen    14 年前

    看起来Git试图移除 .git/rebase-merge 但无法完全删除它。你试过把那个文件夹复制走吗?也要抄走 .git/rebase-apply

        2
  •  333
  •   Gama11 zzapper    4 年前

    另一个 说无法读取“.git/rebase apply/onto”时出错:没有这样的文件或目录。

    我看了看那家伙 documentation 重新调整并找到另一个命令:

    git rebase --quit
    

    这使我回到了我的分支没有任何变化,我可以重新开始我的再基地,就像新的一样。

        3
  •  91
  •   user584317    14 年前

    在任务管理器中杀死它,然后 git rebase --abort

        4
  •  36
  •   Ruth    5 年前

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

     error: could not read orig-head
    

    这使我无法完成重新定位。

    分离的头似乎正好包含了我正确的回退所需的状态,所以我跑了

    rebase --quit
    

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

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

        5
  •  7
  •   Praveen Hiremath    11 年前

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

    执行 git rebase—中止 Git Bash为我工作。

        6
  •  7
  •   Darren Yeats    10 年前

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

    https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

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

    processexplorer将突出显示持有文件锁的进程(对我来说是'grep')。

        7
  •  5
  •   Ethaan    10 年前

    创建具有此名称的文件:

    touch .git/rebase-merge/head-name
    

    git rebase

        8
  •  4
  •   Velocoder    6 年前

    就我而言,第十八个 git rebase --abort git rebase --continue 正在投掷:

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

    我通过手动删除以下内容成功解决了此问题: .git\rebase-apply 目录。

        9
  •  2
  •   Spongman    6 年前

    我在用 git version 2.19.2.windows.1 .

    唯一对我有效的方法就是移除 .git/rebase-apply/ 目录并执行 git reset --hard .

        10
  •  1
  •   meridius    9 年前

    在我的例子中,这是因为我在各自的Git项目中打开了SmartGit的日志,在各自的项目目录中打开了Total Commander。当我关闭这两个我能够重新调整没有任何问题。

    友好的建议:当你试图解决一些问题时,总是一次做一个改变。;)

        11
  •  1
  •   Mohammed Asif    6 年前

    我试过上面提到的所有步骤,但都不管用。最后,

        12
  •  1
  •   LeBorgne Xolve    6 年前

        13
  •  1
  •   Sazzad Hissain Khan    5 年前

    如果你在州以下,再基地不起作用了,

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

    然后第一次跑,

    $ git rebase -quit
    

    $ 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
    
        14
  •  0
  •   Karel Bílek    11 年前

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

        15
  •  0
  •   user3739537    10 年前

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

        16
  •  0
  •   Dani.Rangelov    9 年前

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

        17
  •  0
  •   Jeremy Vaught    6 年前

    除了重启,我什么都试过了 rm -fr .git/REBASE_HEAD

        18
  •  -3
  •   Shiva Agrawal    10 年前

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

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

    团队->重新设置基础->中止

    它对我有用。

    推荐文章