带冲突的git rebase会丢失提交注释

时间:2018-01-26 16:28:41

标签: git rebase

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

  2. 我使用注释(-m)正常提交我的本地更改(在master上)。让我们称这个提交为第一次提交'

  3. git fetch origin

  4. 我确实这样做:git checkout master

  5. git rebase origin/master

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

  7. 我根据需要创建了两个文件并删除了所有冲突标记标记等。

  8. git add .

  9. git commit带有注释(-m),其中我说我解决了一些合并冲突。让我们称这个提交为“冲突解决委员会”。

  10. git rebase --continue这抱怨没有变化。我无法继续,没有更多的冲突。 git status说“所有冲突都已解决”。运行' git rebase - 继续'。唯一的选择似乎是' git rebase --skip'跳过补丁'不管那是什么。

  11. git rebase --skip状态后表示你的分支在1个提交,工作树清理等方面领先于origin / master。好的,这是预期的。

  12. git log按照我想要的顺序显示所有提交,但第一次提交'无处可见它只显示了“冲突决定委员会”#39;在顶部。来自origin / master的提交直接位于其下方。所有文件(有冲突的文件以及其他已更改的文件)中的更改仍然存在,因此我没有忽略实际的更改。

  13. 为什么它没有显示第一个提交'我给那里的评论?

1 个答案:

答案 0 :(得分:2)

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

一般情况下,您可以运行git status,git会告诉您最有可能要做的选项。例如,如果您在步骤8之后运行了git status,则会说(all conflicts fixed: run "git rebase --continue")

您可能已经销毁了您正在寻找的原始提交(因为它没有出现在您的日志中)。它被" CONFLICT RESOLVE COMMIT"取代。您在步骤9中运行的。您有一些选择:

  • 不要担心,你的文件仍然存在,而且你已经失去了一点历史。
  • OR,以交互方式变基(google git rebase -i)将提交消息更改为您想要的任何内容。
  • 或者,使用git reflog(google it)取回原始提交,然后再次尝试使用rebase。