git rebase with conflict 丢失提交评论
git rebase with conflict loses commit comments
我在本地进行了项目更改,但我知道远程存储库(源)也有一些我在本地没有的更改。
我像往常一样(在 master 上)提交我的本地更改,并带有注释 (-m)。我们称此提交为 'THE FIRST COMMIT'.
git fetch origin
只是为了确保我这样做:git checkout master
git rebase origin/master
2个文件有冲突。使用冲突标记(<<<<< HEAD 等)将冲突标记为正常。上半部分显示 origin/master 中的内容,下半部分显示我的主版本中的内容。
在结束标记(即 >>>>>>)之后,它显示了 origin/master 版本中的一行的一部分(显然这是一个补丁或其他东西)我不明白这一点。
我根据需要制作了两个文件并删除了所有冲突标记标签等
git add .
git commit
带有注释 (-m),其中我说我解决了一些合并冲突。我们称此提交为 'CONFLICT RESOLVE COMMIT'.
git rebase --continue
这抱怨没有变化。我不能继续,没有更多的冲突。 git status
表示 'all conflicts fixed' 运行 'git rebase --continue'。唯一的选择似乎是 'git rebase --skip' 跳过 'the patch' 无论如何。
git rebase --skip
在状态显示您的分支领先于 origin/master 1 次提交、工作树清理等之后。好的,这是预期的。
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 它)取回您的原始提交,然后再次尝试变基。
我在本地进行了项目更改,但我知道远程存储库(源)也有一些我在本地没有的更改。
我像往常一样(在 master 上)提交我的本地更改,并带有注释 (-m)。我们称此提交为 'THE FIRST COMMIT'.
git fetch origin
只是为了确保我这样做:
git checkout master
git rebase origin/master
2个文件有冲突。使用冲突标记(<<<<< HEAD 等)将冲突标记为正常。上半部分显示 origin/master 中的内容,下半部分显示我的主版本中的内容。 在结束标记(即 >>>>>>)之后,它显示了 origin/master 版本中的一行的一部分(显然这是一个补丁或其他东西)我不明白这一点。
我根据需要制作了两个文件并删除了所有冲突标记标签等
git add .
git commit
带有注释 (-m),其中我说我解决了一些合并冲突。我们称此提交为 'CONFLICT RESOLVE COMMIT'.git rebase --continue
这抱怨没有变化。我不能继续,没有更多的冲突。git status
表示 'all conflicts fixed' 运行 'git rebase --continue'。唯一的选择似乎是 'git rebase --skip' 跳过 'the patch' 无论如何。git rebase --skip
在状态显示您的分支领先于 origin/master 1 次提交、工作树清理等之后。好的,这是预期的。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 它)取回您的原始提交,然后再次尝试变基。