我们说我有一个文件
hello.txt的
1. Hello
2. World
我添加了以下文字(3. Bye
)..所以文件变为
1. Hello
2. World
3. Bye
并将其提交给SHA1_1
再次添加另一行(4. World
)
1. Hello
2. World
3. Bye
4. World
并将其提交到SHA1_2
如果我还原SHA1_1
,我不应该只收到这样的文件(删除我在3. Bye
中添加的SHA1_1
)
1. Hello
2. World
4. World
不这样做。所以我尝试重置为原来的SHA1_1
和樱桃挑选SHA1_2
。你猜怎么着? SHA1_2
包含带有3. Bye
的整个文件的快照,该文件不在该提交中。有没有更好的方法来获得差异,正如我们在这些提交之间的差异中所看到的那样?
revert bye_commit
1. Hello
2. World
<<<<<<< HEAD
3. Bye
Z. Extra Line
4. World
=======
Z. Extra Line
>>>>>>> parent of f6e1e81... Added Bye
答案 0 :(得分:1)
我担心你的例子无法解决冲突,这意味着一个简单的恢复将要求你解决这个冲突。你的变化太紧密了,所以Git不能自信地告诉他们。
如果我们通过分离SHA1_1和SHA2_1引入的更改来稍微修改示例,那么我们可以做到这一点而不会发生冲突:
添加了Hello.txt
1. Hello
2. World
Z. Extra Line
<强> SHA1_1 强>
1. Hello
2. World
3. Bye
Z. Extra Line
<强> SHA2_1 强>
1. Hello
2. World
3. Bye
Z. Extra Line
4. World
现在Git可以自信地确定3和4是单独的更改并为您自动合并。
> git revert SHA1_1
生成一个如下所示的新提交:
1. Hello
2. World
Z. Extra Line
4. World
您可以在此处查看这些提交的示例:https://github.com/cyborgx37/sandbox/commits/SO-47100683
在您的示例中,当您还原SHA1_1
时,它会尝试将文件还原到:
1. Hello
2. World
当它比较文件的当前状态SHA2_1
时,它会看到:
1. Hello
2. World
3. Bye
4. World
所以git不知道如何处理第3和第4行。
在我的修改示例中,还原尝试应用SHA1_1'
:
1. Hello
2. World
Z. Extra Line
并且文件的当前状态为SHA2_1'
:
1. Hello
2. World
Z. Extra Line
4. World
Git可以比较Z线并看到一条线被移除并自动将两个变化合并在一起。