使用`git rebase --rebase-merges`时“拒绝更新带有错误名称的引用”

Edd*_*ett 4 git git-merge git-rebase

我最近不得不看git rebase --rebase-merges,但我运气不佳。

我维护了 Rust 编译器的一个分支,我最近刚刚在上游合并,在此过程中修复了大量合并冲突。然后我不得不进行第二次合并,因为我很不走运,并且在我进行第一次合并时上游存储库被破坏了。

我希望用来git rebase -i --rebase-merges将我的两个合并压缩在一起,但保留上游创建的嵌套合并(如果可能的话)。

问题是,无论我尝试什么,都会收到此错误消息:

$ git rebase --rebase-merges -i sd-upstream/master                                                                         
error: refusing to update ref with bad name 'refs/rewritten/Auto-merge-of-#65134---davidtwco:issue-19834-improper-ctypes-in-extern-C-fn,-r=rkruppe'
hint: Could not execute the todo command
hint: 
hint:     label Auto-merge-of-#65134---davidtwco:issue-19834-improper-ctypes-in-extern-C-fn,-r=rkruppe
hint: 
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint: 
hint:     git rebase --edit-todo
hint:     git rebase --continue
Run Code Online (Sandbox Code Playgroud)

(上面sd-upstream是我的组织的上游,而不是 Rust 的——我在合并之前在我的分支之前对树进行了重新定位)

即使我没有对 todo 做任何更改,我也会收到上述错误。

我做错了什么,还是 git 错误?看起来 git 被 Bors(Rust 团队用来进行汇总合并等的机器人)自动生成的提交消息阻塞了。

我在 Debian 10 上使用 git-2.20.1。

tor*_*rek 7

--rebase-mergesGit 2.25 中修复了一个错误:

  • 由“git rebase --rebase-merges”生成的待办事项列表中使用的标签用作引用名称的一部分;提出标签的逻辑已被收紧,以避免无法使用的名称。

与该错误一起的是一个相关的错误:

  • 避免“git rebase --rebase-merges”生成的重复标​​签名称的逻辑忘记了机器本身使用“onto”作为标签名称,自动生成的标签必须避免这种情况,已更正。

(这两个都来自 Git 2.25发行说明。)

如果您将 Git 升级到 2.25 版,问题应该会消失。在那之前,我最好的建议是“不要使用--rebase-merges”。