在git中撤消提交的最简单方法是使用revert选项:gitrevert这将撤消最近的提交。包括使用revert,有两种方法可以撤销一个commit操作:gitrevert:恢复git仓库以前的状态,并在git日志中反映变化;gitreset:删除最后一次提交。恢复提交(revert)如果你只是想撤销一个提交而不删除git日志,你可以使用gitrevert命令。它的语法就是我们刚才说的:gitrevert在上面的命令中,它可以是任何用于提交的名字,比如提交的SHA1(提交时会得到这个值),tag,引用名或者任何其他的唯一标识提交东西.让我们举个例子。首先在git中初始化一个文件:$gitcommit-m"initcommit"[master(root-commit)b1adf72]initcommit1filechanged,3insertions(+)createmode100644README.md$echo"anewlineinreadme》>>README.md使用cat命令查看此文件内容:$catREADME.mdHeadingAreadme如果为空则无用。但是这个readme就更没用了,因为它浪费了读者的时间。在readme中换行,然后我使用gitadd。将它添加到暂存区,然后进行提交(提交的文本是:acommitthatwillliveonever):$gitcommit-m'acommitthatwillliveonforever'[masterb731901]一个将永远存在的提交1文件更改,1次插入(+)对于此提交,系统返回给我一个唯一标识符(masterb731901)。现在我们运行gitrevert并使用这个唯一标识符恢复到上次提交的状态:$gitrevertmasterb731901[master01c9be7]Revert"acommitthatwillliveonforever"1filechanged,1deletion(-)then让我们看一下git日志,看看撤消是否反映在日志中:$gitlogcommit01c9be75eff7b5ae48c6c35bbb7c63ac1ebc3fcd(HEAD->master)作者:PrathamPatel日期:MonFeb2821:29:362022+0530$gitlogcommit01c9be75eff7b5ae48c6c35bbb7c63ac1ebc3fcd(HEAD->master)作者:PrathamPatel日期:2022年2月28日星期一21:29:36+0530在willalivecom上恢复forever"Thisrevertscommitb731901deaa30851832c07b7cb7ed535b68d473d.commitb731901deaa30851832c07b7cb7ed535b68d473dAuthor:PrathamPatel?pratham@itsfoss.com??>Date:MonFeb2821:29:122022+0530acommitthatwillliveonforevercommitb1adf72e535921ff966ff78f062943b717e78a08Author:PrathamPatel日期:2月28日星期一21:20:432022+0530initcommit以上输出可见,g它记录了这次撤销,但是README文件已经恢复到它以前的状态:$catREADME.mdHeadingA如果它是空的,自述文件是无用的。但是这个readme就更没用了,因为它浪费了读者的时间。删除提交如果你想在不保留日志的情况下完全恢复错误的提交,可以使用gitreset。git中的每一次提交(commit)都相当于仓库的一次快照。另外,在git中还有一个名为HEAD的引用变量——用gitlog查看日志的时候可以看到。此HEAD用于指向您正在处理的分支中的最新提交。为了演示,我们先改一个文件:$gitcommit-m"initcommit"[master(root-commit)b1adf72]initcommit1filechanged,3insertions(+)createmode100644README.md$echo"anew自述文件中的行”>>README.md$catREADME.mdHeadingA如果它是空的,自述文件是无用的。但是这个自述文件更没用,因为它浪费了读者的时间。在自述文件中添加一行并提交:$gitadd.$gitcommit-m"acommitthatiwillregretlater"[masterfb58caf]acommitthatiwill后悔后来更改了1个文件,1个插入(+)然后使用gitreset命令撤消此提交:$gitreset--softHEAD~1接下来,查看git日志:$gitlogcommitb1adf72e535921ff966ff78f062943b717e78a08(HEAD->master)作者:PrathamPatel日期:2022年2月28日星期一21:20:43+0530如您所见,我们的最后一次提交(提交文本我稍后会后悔的提交)已经消失了。如您所见,此提交已完全删除,因为我将指向最后一个引用(由HEAD~1表示)的HEAD移动了。这个删除没有影响我们的工作文件README.md:$gitstatusOnbranchmasterChangestobecommitted:(use"gitrestore--staged..."tounstage)modified:README.md--softflag表示运行gitreset时修改了git保存的日志。如果你想将git存储库的内容恢复到以前的状态,你可以使用--hard标志(不过要小心使用它,并确保你有你需要的文件的备份)。