尝试运行"git 变基 --continue"时出错,无法锁定 ref 'refs/heads/Head-feature'



我正在运行命令git rebase --continue并得到一个错误:

error: update_ref failed for ref 'refs/heads/HEAD-feature': cannot lock ref 'refs/heads/HEAD-feature': is at db50dd34de1e90c0616bf9318be489ee8d9a012a but expected 83f09532b2352418c0f562f48929dc504e6a0452 error: could not update refs/heads/HEAD-feature

我看了几个类似的问题,但没有一个答案有效。

我尝试了以下方法:

1. git update-ref -d refs/remotes/origin/HEAD-feature
2. git --no-optional-locks fetch --prune origin
3. git gc --prune=now
4. git remote prune origin

我找到的克服这一问题的唯一方法是执行git rebase --abort,但随后我会丢失在交互式重新基础中所做的所有更改。有什么想法吗?

您或某个流氓进程以与git rebase冲突的方式扰乱了您的回购状态

错误消息表示您或其他人或某事对您的回购状态做了某些操作,而在重新建立基础时您不能这样做。它本以为裁判会指向一个特定的承诺,但却从下面改了出来。

如何恢复

以下是如何在不损失迄今为止所有重新基础工作的情况下从这种情况中恢复(假设您尚未中止(:

  1. 保存到目前为止的重置进度

    git branch PARTIAL-REBASE HEAD
    

    这将创建一个名为PARTIAL-REBASE的分支引用,指向最后一个重新基准的提交,即到目前为止您的重新基准工作。

    您必须在git rebase --abort之前执行,否则您将不得不搜索reflogs来恢复您的部分重基础,这更为复杂。

  2. 中止重新基准

    git rebase --abort
    
  3. 从停止的位置恢复重新基准

    有很多方法可以做到这一点,但这是最简单的。

    首先看看哪些提交包含在您保存的部分重基础中:

    git log PARTIAL-REBASE
    

    请确保您在正确的分支上,然后重新运行原始的rebase命令,但添加以下内容命令选项:

    --onto PARTIAL-REBASE --interactive 
    

    编辑器中将显示一个提交到rebase的列表。小心地只删除那些提交的行已经包含在上面PARTIAL-REBASE的git日志中。除非你知道自己是什么,否则不要做出任何其他改变做。

    保存并关闭重新基准列表。rebase列表中的提交现在将有效地将重新设置为PARTIAL-REBASE在你中止的时候恢复你的重新基准。

  4. 验证和清理

    请验证重新设置基础的分支是否良好。

    当您确定您的重新基准成功且一切正常时,删除PARTIAL-REBASE参考:

    git branch -D PARTIAL-REBASE
    

另请参阅How to fix";损坏的";交互式数据库?Git rebase失败了,尽管我很惊讶没有人给出";如何恢复";像我这样的解决方案。

最新更新