git rebase with conflict 丢失提交评论

git rebase with conflict loses commit comments

  1. 我在本地进行了项目更改,但我知道远程存储库(源)也有一些我在本地没有的更改。

  2. 我像往常一样(在 master 上)提交我的本地更改,并带有注释 (-m)。我们称此提交为 'THE FIRST COMMIT'.

  3. git fetch origin

  4. 只是为了确保我这样做:git checkout master

  5. git rebase origin/master

  6. 2个文件有冲突。使用冲突标记(<<<<< HEAD 等)将冲突标记为正常。上半部分显示 origin/master 中的内容,下半部分显示我的主版本中的内容。 在结束标记(即 >>>>>>)之后,它显示了 origin/master 版本中的一行的一部分(显然这是一个补丁或其他东西)我不明白这一点。

  7. 我根据需要制作了两个文件并删除了所有冲突标记标签等

  8. git add .

  9. git commit 带有注释 (-m),其中我说我解决了一些合并冲突。我们称此提交为 'CONFLICT RESOLVE COMMIT'.

  10. git rebase --continue 这抱怨没有变化。我不能继续,没有更多的冲突。 git status 表示 'all conflicts fixed' 运行 'git rebase --continue'。唯一的选择似乎是 'git rebase --skip' 跳过 'the patch' 无论如何。

  11. git rebase --skip 在状态显示您的分支领先于 origin/master 1 次提交、工作树清理等之后。好的,这是预期的。

  12. git log 按我想要的顺序显示所有提交,除了 'THE FIRST COMMIT' 无处可见,它只显示顶部的 'CONFLICT RESOLVE COMMIT'。来自 origin/master 的提交就在它的正下方。更改仍然存在于所有文件中(有冲突的文件以及其他已更改的文件),所以我没有丢失实际更改。

为什么它没有显示 'THE FIRST COMMIT' 我在那里给出的评论?

你在第 9 步出错了。你不应该在你正在解决冲突的 rebase 操作的中间提交新的提交。在第 9 步,您应该 运行 git rebase --continue 而不是 运行ning git commit -m "..."。顺便说一句,这就是 git rebase --continue 在第 10 步中抱怨的原因。

一般来说,您可以 运行 git status 并且 git 会告诉您您最有可能想要做的选项。例如,如果您在第 8 步之后 运行 git status,它会说 (all conflicts fixed: run "git rebase --continue").


您可能已经破坏了您正在寻找的原始提交(因为它没有出现在您的日志中)。它被替换为 "CONFLICT RESOLVE COMMIT",您在第 9 步中 运行。您有一些选择:

  • 别担心,你的文件都还在,你丢失了一点点历史。
  • 或者,交互式变基(google git rebase -i)以将提交消息更改为您想要的任何内容。
  • 或者,使用 git reflog(google 它)取回您的原始提交,然后再次尝试变基。