"refusing to update ref with bad name" 当使用 `git rebase --rebase-merges`

"refusing to update ref with bad name" when using `git rebase --rebase-merges`

我最近不得不看一下 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

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

我收到上述错误即使我没有对待办事项做任何更改

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

我在 Debian 10 上使用 git-2.20.1。

--rebase-merges 中有一个错误已在 Git 2.25 中修复:

  • A label used in the todo list that are generated by "git rebase --rebase-merges" is used as a part of a refname; the logic to come up with the label has been tightened to avoid names that cannot be used as such.

与该错误一起出现的还有一个相关错误:

  • The logic to avoid duplicate label names generated by "git rebase --rebase-merges" forgot that the machinery itself uses "onto" as a label name, which must be avoided by auto-generated labels, which has been corrected.

(这两个都来自Git 2.25 release notes.)

如果将 Git 升级到 2.25 版,问题应该会消失。在那之前,我最好的建议是 "don't use --rebase-merges".