当前位置: 首页 > 后端技术 > Java

如何在IDEA中完成Git版本回滚?

时间:2023-04-01 19:20:11 Java

@[toc]上周发文后,有小伙伴问如何在IDEA中回滚Git版本?其实宋大哥之前也写过一篇文章,不过时间有点久了,所以今天就和小伙伴们重温一下这个话题,顺便说一下如何在IDEA中回滚Git版本。Git中的undo操作可以归纳为四类:工作区的代码想撤销添加到暂存区的代码,提交到本地仓库的代码想撤销远程仓库的代码。想要撤消1.基于命令行1.1work如果你想撤消区域中的代码,也许有一天我正在写代码。写了半天,发现写错了。如果我想恢复原来的状态,一个笨办法就是把我刚刚写的代码一行一行地删掉,但是这种方法代价太大了,我们可以通过gitcheckout--命令撤销工作区中的代码修改。如下图所示:首先我们执行gitstatus命令,发现工作区是干净的,然后执行cat命令,发现文件只有两行内容,然后通过vi编辑器在文件中添加一行,保存退出,再次退出执行gitstatus命令后,工作区的状态发生了变化,这时我们执行了gitcheckout--git01.txt命令,也就是撤销之前的操作,将git01.txt恢复到以前的状态。命令执行成功后,我们再次执行cat命令,发现文件内容已经恢复。这时再次执行gitstatus,status也恢复了。1.2如果要取消添加到暂存区的代码,如果你想取消,但是代码已经提交到暂存区了,不用担心,你也可以取消。分两步:将暂存区中的代码撤销到工作区,并转移到工作区中撤销代码(具体操作同1.1节)撤销暂存区中的代码,以及我们可以使用gitresetHEAD命令来实现。如下图所示:这里的代码比较简单,核心流程是先执行gitresetHEAD命令,并从暂存区撤消,其余操作参考1.1节。1.3提交到本地仓库的代码想撤销。同样,提交到本地仓库的代码也可以撤销。我们可以使用gitreset--hard命令来实现版本回退。命令中的版本号是多少有两种不同的写法:HEAD^可以用来描述版本,一个^表示上一个版本,两个^^表示前两个版本,以此类推。也可以用数字代替^,比如前100个版本可以写成HEAD~100。也可以直接写版本号,就是跳到某个版本的意思。每次提交成功后,我们都会生成一个hashcode作为版本号,所以这里我们也可以直接填写版本号,hashcode很长,但是我们不用全部输入,直接输入即可前几个字符,然后就可以识别了。看下面一系列操作:通过gitlog查看当前提交日志:通过gitreset回滚两个版本HEAD^^:查看日志,发现上次提交的版本号是695ce1fe,使用gitreset--hard695ce1fe命令回到回滚前的状态:通过gitreset--hardHEAD~1回到上一个版本:当然,以上操作都是基于命令行的。如果你对命令行操作比较熟练的话,其实命令行操作一点点比IDEA要快很多。1.4远程仓库撤销如果代码提交到远程仓库,你想撤销,如1.3小节所述,可以先在本地仓库撤销,再推送到远程仓库。2、了解了基于IDEA的命令行操作之后,再看基于IDEA的操作就容易多了。2.1undowithoutcommit对于第一节中的前两个undo操作,即修改后的文件还没有提交。这时候如果想撤销,方法很简单。点击IDEA右上角的撤消按钮:如果修改过文件,不管是不是没有执行gitadd命令,只要没有commit,都可以用这个按钮撤消修改.点击该按钮,会弹出如下提示框:这里会列出所有已修改但未提交的文件。如果要撤销对任何文件的修改,只需勾选该文件,然后点击回滚按钮即可完成撤销操作。2.2Commit如果要撤销commit,需要先打开commitlog,点击如下按钮打开:也可以直接点击IDEA右上角的时钟图标,快速打开commitlog:commitlog类似如下:Rollbackatthistime视情况而定。首先,undo操作有两种类型:RevertCommitUndoCommit我们分别来看。2.2.1UndoCommitUndoCommit该操作只能用于最新的commit,不能用于其他commit。在最新的commit上,右击,如下图:右击其他commit:本例中,我们就来看看如何UndoCommitarecentcommit。在latestcommitlog上右击,选择UndoCommit,如下图:选择后,点击OK,撤销最新的commit。这是为了撤消最新的提交。撤消后,本地修改相当于添加但未提交的状态。这时候我们可以继续开发新的代码,然后commit,再push;或者按照2.1节中描述的方式,继续进行撤销操作。我电脑上的IDEA这个操作偶尔会出问题。取消提交后,IDEA无法检测到文件处于未提交状态。我需要关闭IDEA再重新打开,IDEA可以发现文件处于未提交状态。此时,您可以按照2.1节的步骤继续回滚。你可以在实验过程中注意这个区域。2.2.2RevertCommitRevertCommit可以用在任何地方。与UndoCommit不同的是,RevertCommit之后会产生一条commit记录。相当于RevertCommit,其实就是一次提交,只不过提交的内容恰恰相反,只是抹掉已有的内容。RevertCommit操作可用于所有日志,而不仅仅是刚刚提交的提交。操作方法如下:找到需要回滚的地方,右击,选择RevertCommit:这时候会弹出一个提交对话框,是一个普通的提交对话框,如下:committing,可以看到内容已经被Withdrawal,提交日志中多了一条记录,如下图:2.3推送想取消如果已经推送到远程仓库,如何取消?其实和2.2节是一样的。先在本地仓库撤销。撤销完成后,重新修改代码,最后强制推送。不过在强制推送的时候注意不要覆盖同事的代码。3.总结,今天给大家分享了一些Git中undo的问题。有什么问题欢迎留言讨论~