我提交并推送我的代码三次,他们提交1,提交2和提交3。
我希望将我的代码回滚到提交2并将它们推送到远程存储库。
所以我做点恢复操作提交2(参见图像还原),一个文件合并冲突对话框显示(参见图像文件合并)和合并显示的子对话框,就像图像合并子图像。
答:我无法理解为什么在进行还原操作时会显示以下代码?似乎系统准备好所有历史记录提交记录让我合并。
码
<<<<<<< HEAD
//Submit 3
=======
//Submit 1
>>>>>>> parent of 86821fc... Submit 2
B:而且,我无法得到正确的结果(将我的代码回滚到提交2)无论我选择接受你的,接受他们的或合并......命令,为什么?
C:如果我启动Merge ...操作,系统会怎么做?
1)为什么会这样?
重置将当前分支获取到提交历史记录中的上一个点。
还原特定提交会创建一个新提交,其中包含与您选择的提交完全相反的提交。这不会修改旧提交,也不会让您回到过去的那一点。
这也是你得到一个你没想到的合并的原因。
2)如何解决手头的情况?
现在尝试重置到所有这些混乱之前的点,它应该是好的再次。
首先,如果合并仍在进行中,则中止它
git merge --abort
然后检查你的log
并找出你最初想要“恢复”的提交(我建议你在这里改变你对这个术语的口语使用,就像你看到的那样伤害)并重置它:
git reset --hard <commitHash>
(既然你(我猜?)没有被推到遥控器上,没有任何伤害。如果你实际上在这个过程中推了一些东西,请评论,我会编辑我的答案来解决它。)
3)将来如何避免同样的问题?
查看名为“Do revert”的屏幕截图,这是您应该选择“将当前分支重置为此处”而非“恢复”的位置。
意识到这似乎是What are different about Revert command among of popup menu, git menu and Show History in Android Studio 3.3?旁边的问题,我不确定我的回答是否有问题。
答:我无法理解为什么在进行还原操作时会显示以下代码?似乎系统准备好所有历史记录提交记录让我合并。
这被称为Merge Conflict。它发生在两个提交要合并但他们发现编辑同一个地方有不同的想法,这使得Git无法决定保留哪一个。然后Git保留这两者,用以下格式显示:
<<<<<<< Branch1
Content A
=======
Content B
>>>>>>> Branch2
并让您手动决定保留哪一个。
B:而且,我无法得到正确的结果(将我的代码回滚到提交2)无论我选择接受你的,接受他们的或合并......命令,为什么?
然后我发现我的答案有错。我稍后会修改它。
如果要将存储库还原到提交2的时间,则应选择提交2的子提交,即在您的情况下提交3,然后使用“他们的”进行合并。
为何提交3?这是因为,Revert
“生成一个新的提交,它会恢复原始提交中所做的更改”,然后当您还原提交3时,它将清除您在提交3之后所做的事情(包括),这就是存储库看起来就像你提交2。
为什么“他们的”?在这里,如果你选择提交2,那么提交是在提交2,“我们的更改”是提交3(我们在提交2后做了什么),“他们的更改”是提交1(为什么?我们要还原(取消) )我们在提交2中做了什么,然后在提交2之前,存储库变成了它的样子,即提交1)。
为何冲突?提交3和提交1已经改变了同一行有不同的想法,然后发生冲突。
...等等,在我测试的时候,我想我在IntelliJ IDEA中发现了Local Changes
或Changelist
的错误...是的,这已被多次报道,使用不同的复制方法,例如IDEA-124412,IDEA-67036和IDEA-20326 ,在更改列表中显示了使用不同方法修改了两次的文件,认为第二次修改已经恢复了第一次修改。
C:如果我启动Merge ...操作,系统会怎么做?
当您单击Merge...
时,您可以看到问题的最后一张图片中显示的窗口。此窗口允许您进行交互式合并。有“X”和“>>”或“<>”或“<