我对git revert的工作原理感到困惑

qrjkbowd  于 2022-12-17  发布在  Git
关注(0)|答案(3)|浏览(114)

我想知道发生了什么。我创建了一个HTML文件,并在其中放入了一些行

this is first line
this is second line
this is third line
this is fourth line

并且在每一行之后被提交,如分别提交a、提交B、提交c、提交d。
现在我执行了一个revert以提交c,但是它抛出了一个错误:

could not revert 82b69e5... c

hint: after resolving the conflicts, mark the corrected paths <br>
hint: with 'git add <paths>' or 'git rm <paths>' <br>
hint: and commit the result with 'git commit'<br>

我想知道git-revert是如何工作的,我知道类似于“撤销一个提交并添加一个新的提交”,但不知道如何成功地使用它。

abithluo

abithluo1#

它会为你想要还原的提交创建一个反转补丁,所以在你的例子中,提交c看起来像:

this is first line
 this is second line
+this is third line
# End of file

然后,从d运行git revert c,它会尝试创建以下代码并将其应用到树中:

this is first line
 this is second line
-this is third line
# End of file

但是,您的文件如下所示:

this is first line
this is second line
this is third line
this is fourth line
# End of file

所以创建的补丁不适用(文件末尾与第四行冲突)。所以当Git告诉你:

could not revert 82b69e5... c
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add ' or 'git rm '
hint: and commit the result with 'git commit'

它的意思是“我试着做你要求的事情,但我面临着一个我无法解决的案例”,所以你需要:

最有可能的解决方案是:

this is first line
this is second line
this is fourth line
ni65a41a

ni65a41a2#

git revert命令可以被认为是一个'undo'类型的命令,但是它不是一个传统的撤销操作。
本质上,它会撤销指定提交中所做的一切,然后在此过程中创建一个新的提交。您可以查看this以了解更多信息。
关于你的问题,你遇到了合并冲突,你可以使用git mergetools(Ex.Meld)来解决这些冲突。

ggazkfy8

ggazkfy83#

git revert命令可以被认为是一个“撤销”类型的命令,然而,它不是一个传统的撤销操作。
实际上,它会撤消在指定提交中完成的所有操作,然后在进程中创建一个新的提交。

相关问题