git rebase --continue 仍然看到冲突,git status 告诉我有 none

git rebase --continue still sees conflicts, git status tells me there are none

我是 运行 一个相当复杂的变基,在最近几次提交中进展顺利。我解决了一个非常小的冲突,但不知何故陷入困境 --

    ╰─$ git status
rebase in progress; onto 99e642b
You are currently rebasing branch 'Vince_issue_157' on '99e642b'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

    ╰─$ git rebase --continue Applying: RM debugger No changes - did you forget to use git add?

这两者不应该是矛盾的吗?我怎样才能弄清楚 git 不喜欢什么?


如果出现任何危险信号,则快速重新记录输出

dc04ac4 (HEAD) HEAD@{0}: rebase: improve warning
f97482a HEAD@{1}: rebase: incomplete test for new warning
e73be23 HEAD@{2}: rebase: warning (that needs tweak) on default lang with no translation problem
99e642b (upstream/master, master) HEAD@{3}: rebase: checkout master
5d8b393 (origin/Vince_issue_157, Vince_issue_157) HEAD@{4}: checkout: moving from master to Vince_issue_157
99e642b (upstream/master, master) HEAD@{5}: reset: moving to upstream/master

我认为问题在于没有更改 可应用于此修订版。可能你想做 git rebase --skip

快速回顾:冲突发生在 Git 试图复制主题行为:

的现有提交时
RM debugger

也就是说,在 git rebase 期间,它通过将一些提交系列复制到 new-and-improved 提交来工作,这些提交与原始提交做同样的事情,除了一些改进(例如,处于不同的开始基础提交),Git 试图复制该提交,但出现了一些合并冲突。因此变基停止,RM debugger 尚未应用。

然后您在 index-and-work-tree 中做了一些工作来解决这些冲突,包括最后的 git add。那你运行git rebase --continue.

这条消息:

$ git rebase --continue
Applying: RM debugger
No changes - did you forget to use git add?

并不意味着有冲突。这意味着您索引中的源代码现在可以作为 RM debugger 的 new-and-improved 副本提交,与您索引中的源代码完全相同现有提交 dc04ac4 (improve warning),它本身是一些旧提交的副本,其主题已经是 improve warning.

Git 不喜欢重复相同源代码的提交。 (Git 称这些 空提交 ,虽然它们根本不是空的,它们只是立即重复。)它非常不喜欢这个以至于 git rebase 拒绝默认情况下完全执行此操作,包括在您解决任何冲突之后。

这有时表明您以错误的方式解决了冲突:您不小心丢失了更改。但也许正确的做法。

如果此时正确的做法是 完全删除 原始提交——如果现在不需要更改,因为新的和改进的提交的新基础不需要不需要任何修复——只需 运行:

git rebase --skip

告诉Git:毕竟不应该复制这个提交。

如果你真的想要空提交,你可以自己手动提交,使用git commit --allow-empty,然后使用git rebase --continue继续。