如果中止不起作用,如何中止交互式重建基础?

我通过一个交互式 rebase 让自己陷入了混乱,现在我希望终止它。(例如,回到我被拖入交互式 rebase 模式之前的那一点,在我的例子中是通过 git pull --rebase。)这样做的方法似乎是通过 git rebase --abort,但这不工作:

$ git rebase --abort
error: Ref refs/heads/master is at 55b388c141b1485b1acd9e050dbeb0eb90ef2ee7 but
expected b918ac16a33881ce00799bea63d9c23bf7022d67
fatal: Cannot lock the ref 'refs/heads/master'.
Could not move back to refs/heads/master

我怎样才能摆脱交互式基础模式,并清除所有引用它?(git reset --hard成功了,但是没有让我退出 rebase 模式。)

162928 次浏览

试着按照你在屏幕上看到的建议,首先将你主人的 HEAD 重置为它期望的提交。

git update-ref refs/heads/master b918ac16a33881ce00799bea63d9c23bf7022d67

然后,再次中止重新基础。

使用 Git 2.34(2021年第四季度) ,git rebase --abort应该更加可靠:

git rebase <upstream> <tag>(< a href = “ https://git-scm.com/docs/git-rebase”rel = “ nofollow norefrer”> man )在中间中止时失败,因为它错误地试图写入标记对象而不是剥离它到 HEAD。

参见 提交7740ac6提交1d1882635f070b(2021年9月21日)和 提交 d045719第一季,第14集犯罪提交54627db提交7390c65提交 e505f45提交7740ac60(2021年9月13日)。
(由 朱尼奥 · C · 哈马诺 gitster七月七日合并,2021年10月6日)

rebase : 解引用标记

签名: 菲利普 · 伍德

以‘ git rebase <A> <B>(< a href = “ https://git-scm.com/docs/git-rebase”rel = “ nofollow norefrer”> man )开始的 rebase 在概念上是第一个 checkout <B>,并从该状态开始运行 git rebase <A>
git rebase --abort(< a href = “ https://git-scm.com/docs/git-rebase # Document/git-rebase.txt--abort”rel = “ nofollow noReferrer”> man )在这样一个基地的中间应该把我们带回到状态,我们检查了 <B>

这在以前是有效的,即使当 <B>是指向提交的标记时也是如此,直到 Git 2.20.0在 C中重新实现了该命令。
该命令现在抱怨标记对象本身无法签出,这在技术上可能是正确的,但不是用户要求的。

在解析 <B>时使用 lookup_commit_reference_by_name()修复这个旧的回归。
脚本版本不需要剥离标记,因为它传递给标记的命令(例如‘ git reset(< a href = “ https://git-scm.com/docs/git-set”rel = “ nofollow norefrer”> man ))本身就剥离了标记。