意识到这似乎是Android Studio 3.3 中弹出菜单、git 菜单和显示历史记录之间的恢复命令有什么不同?,我不确定我的回答是否有问题。
A:我不明白为什么我做Revert操作时会显示如下代码?似乎系统准备好所有历史提交记录让我合并。
这称为合并冲突。当两个提交要合并但他们发现用不同的想法编辑同一个地方时,就会发生这种情况,这使得 Git 无法决定保留哪一个。然后 Git 保留这两者,格式如下:
<<<<<<< Branch1
Content A
=======
Content B
>>>>>>> Branch2
并让您手动决定保留哪一个。
B:而且,无论我选择 Accept Yours、Accept theirs 还是 Merge... 命令,我都无法得到正确的结果(将我的代码回滚到提交 2),为什么?
然后我发现我的答案是错误的。我稍后会修改它。
当您想将存储库恢复到您提交 2 的时间时,您应该选择提交 2 的子提交,在您的情况下是提交 3,然后使用“他们的”进行合并。
为什么提交 3?那是因为,Revert
“产生一个新的提交,它会还原原始提交中所做的更改”,然后当您还原提交 3 时,它将清除您在提交 3 之后所做的(并包括),这正是存储库中所做的看起来像你提交 2 时的样子。
为什么是“他们的”?这里,如果选择Submit 2,那么commit就在Submit 2,“Our changes”就是Submit 3(我们在Submit 2之后做了什么),“Their changes”就是Submit 1(为什么?我们要revert(取消) 我们在提交 2 中所做的,那么存储库就变成了提交 2之前的样子,即提交 1)。
为什么会发生冲突?提交 3 和提交 1 用不同的想法更改了同一行,然后发生冲突。
...等等,在我测试的时候,我想我发现了IntelliJ IDEA的一个bugLocal Changes
...和IDEA-20326,使用不同方法修改两次的文件已在更改列表中显示,认为第二次修改已恢复第一次修改。Changelist
C: 如果我启动 Merge... 操作,系统会做什么?
当您单击 时Merge...
,您可以看到问题最后一张图片中显示的窗口。此窗口允许您进行交互式合并。窗口两侧有冲突的行号附近有“X”和“>>”或“<<”图标。单击“X”表示您拒绝该侧的那段代码,单击“>>”或“<<”表示您接受该侧的那段代码。之后,您仍然可以编辑中间的“结果”。