为什么 git revert 会产生冲突?
Why does git revert produce conflicts?
我有以下提交
dd9e52bafac5fa427ed64c5d9cf08015fa804ed4 Added Line 3
a000427a4c70781d0bed7b31f56f290ac1d636b7 Added Line 2
20baa578ae205768639620749f53bd318e329e73 Added Line 1
7c043a104394ba4ba5a2fb29d4526de50b7d12be Created file.txt
- 在提交 7c04 时,我创建了一个名为 file.txt
的空白文件
- 在提交 20ba 时,我将文本“第 1 行”添加到文件
- 在提交 a000 时,我将文本“第 2 行”添加到文件
- 在提交 dd9e 时,我将文本“第 3 行”添加到文件中
在提交 dd9e 时 file.txt 现在读取
Line 1
Line 2
Line 3
Head 和 master 指向最后一次提交 (dd9e)。
如果我 运行 git 命令
git revert 20baa
有人告诉我
error: could not revert 20baa57... Added Line 1
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
不明白为什么会有冲突
在 VS Code 中查看冲突时显示以下内容
我想要发生的事情
我想撤消在提交 20baa 中所做的更改(即从文件中删除第 1 行)。我意识到我可以手动执行此操作然后提交更改,但我认为 git 还原是为了撤消更改?
我是不是误解了 git revert 的作用?
git revert <commit>
创建一个新提交,它执行与给定提交相反的操作。在上述情况下,它尝试应用由 git diff -R 20baa57^..20baa57
.
生成的补丁
如果更改不能完全反向应用,就会发生冲突。您可以解决冲突(修复、添加、提交),也可以中止还原并手动执行更改。
根据冲突的类型,提供不同的 merge strategy (--strategy
) 或策略选项 (-X
) 可能会更好。
有关详细信息,请参阅 man git-revert
。
git revert
查看原始提交中所做的更改,生成具有相反更改的差异,并尝试应用它。在您的情况下,Git 正在尝试应用此差异:
-Line 1
<nothing else in the file>
当尝试从任何 diff 对一行应用更改时,如果该行 或 从那时起它的两个相邻行发生了更改,Git 将引发冲突。这就是 Git 用来猜测同一文件中的更改是否重要到足以打扰您的启发式方法。使用这种启发式方法,上述差异与文件的最新状态冲突,即:
Line 1
Line 2
Line 3
它拒绝只删除第 1 行,因为下一行以前什么都没有,但现在是第 2 行。Git 认为可能会影响第 1 行的含义。它不会让你删除第 1 行而不确认后来添加的第 2 行并没有使第 1 行更重要,毕竟值得保留。
我有以下提交
dd9e52bafac5fa427ed64c5d9cf08015fa804ed4 Added Line 3
a000427a4c70781d0bed7b31f56f290ac1d636b7 Added Line 2
20baa578ae205768639620749f53bd318e329e73 Added Line 1
7c043a104394ba4ba5a2fb29d4526de50b7d12be Created file.txt
- 在提交 7c04 时,我创建了一个名为 file.txt 的空白文件
- 在提交 20ba 时,我将文本“第 1 行”添加到文件
- 在提交 a000 时,我将文本“第 2 行”添加到文件
- 在提交 dd9e 时,我将文本“第 3 行”添加到文件中
在提交 dd9e 时 file.txt 现在读取
Line 1
Line 2
Line 3
Head 和 master 指向最后一次提交 (dd9e)。
如果我 运行 git 命令
git revert 20baa
有人告诉我
error: could not revert 20baa57... Added Line 1
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
不明白为什么会有冲突
在 VS Code 中查看冲突时显示以下内容
我想要发生的事情
我想撤消在提交 20baa 中所做的更改(即从文件中删除第 1 行)。我意识到我可以手动执行此操作然后提交更改,但我认为 git 还原是为了撤消更改?
我是不是误解了 git revert 的作用?
git revert <commit>
创建一个新提交,它执行与给定提交相反的操作。在上述情况下,它尝试应用由 git diff -R 20baa57^..20baa57
.
如果更改不能完全反向应用,就会发生冲突。您可以解决冲突(修复、添加、提交),也可以中止还原并手动执行更改。
根据冲突的类型,提供不同的 merge strategy (--strategy
) 或策略选项 (-X
) 可能会更好。
有关详细信息,请参阅 man git-revert
。
git revert
查看原始提交中所做的更改,生成具有相反更改的差异,并尝试应用它。在您的情况下,Git 正在尝试应用此差异:
-Line 1
<nothing else in the file>
当尝试从任何 diff 对一行应用更改时,如果该行 或 从那时起它的两个相邻行发生了更改,Git 将引发冲突。这就是 Git 用来猜测同一文件中的更改是否重要到足以打扰您的启发式方法。使用这种启发式方法,上述差异与文件的最新状态冲突,即:
Line 1
Line 2
Line 3
它拒绝只删除第 1 行,因为下一行以前什么都没有,但现在是第 2 行。Git 认为可能会影响第 1 行的含义。它不会让你删除第 1 行而不确认后来添加的第 2 行并没有使第 1 行更重要,毕竟值得保留。