Git 还原导致合并冲突

Git revert causes merge conflict

我创建了一个虚拟的 txt 文件并在每次提交时都输入了一个新行 如:

//dummy.txt
first commit
second commit
third commit

现在我想通过还原第二个提交来删除第二行。但是,我在这个简单的实验中收到了合并冲突。有人可以解释为什么吗?

您的示例实际上并不像您想象的那么微不足道,因为您的更改都在连续的行上。主要问题是 third commit 引入的差异实际上取决于 second commit 中所做的更改。 Git 存储每个提交的完整树,但仍然需要能够将提交表示为与先前提交的差异(不知道这对你是否有意义)。

如果您尝试相同的操作,但通过修改同一文件的不同部分进行 3 次提交,则第二次提交的还原不会失败。由于默认上下文差异为 3,因此如果您的编辑彼此之间的距离超过 3 行,它应该不会失败。