赞
踩
其实这个松哥之前写过文章,但是时间久远了,所以今天再和小伙伴们重新捋一捋这个话题,顺便也来聊聊如何在 IDEA 中进行 Git 的版本回退。
Git 中的撤销操作,我们可以归纳为四类:
可能有一天我正在写代码,写了很久发现写错了,想恢复到一开始的状态,一个笨办法就是把刚刚写的代码一行一行的删除,不过这种方式成本太高,我们可以通过git checkout -- <file>
命令来撤销工作区的代码修改。如下图:
首先我们执行了 git status
命令,发现工作区是干净的,然后执行了 cat 命令,发现文件只有两行内容,然后通过 vi 编辑器向文件中添加一行,保存并退出,退出来之后又执行了 git status
命令,此时工作区的状态已经发生变化,然后我们执行了 git checkout -- git01.txt
命令,表示撤销之前的操作,让 git01.txt
恢复到之前的状态,该命令执行成功之后,我们再执行 cat
命令发现文件内容已经恢复了,此时再执行 git status
,状态也恢复了。
如果想要撤销,但是代码已经提交到暂存区了,不用担心,也能撤销,分两个步骤:
将暂存区的代码撤销,我们可以使用 git reset HEAD
命令来实现。如下图:
这里的代码都比较简单,核心的过程就是先执行 git reset HEAD
命令,从暂存区撤销,剩下的操作参考 1.1 小节。
同样的,提交到本地仓库的代码一样也可以撤销,我们可以利用 git reset --hard <版本号>
命令来实现版本回退,该命令中的版本号有几种不同的写法:
HEAD^
来描述版本,一个 ^
表示前一个版本,两个 ^^
表示前两个版本,以此类推。^
,比如说前 100
个版本可以写作 HEAD~100
。看下面一系列的操作:
git log
查看当前提交日志:git reset HEAD^^
向前回退两个版本:695ce1fe
,利用 git reset --hard 695ce1fe
命令回到回退之前的状态:git reset --hard HEAD~1
回到上一个版本:当然以上操作都是基于命令行的,如果你命令行操作比较熟练的话,其实命令行操作比 IDEA 上点点点要快很多。
如果代码提交到远程仓库了,想要撤销,那就如 1.3 小节所讲,先在本地仓库撤销,然后 push 到远程仓库即可。
看懂了命令行操作,再看基于 IDEA 的操作就容易多了。
对于第一小节的前两种撤销操作,即修改的文件还没 commit,此时想要撤销,方式很简单,点击 IDEA 右上角的撤销按钮:
如果你修改了文件,无论有没有执行 git add
命令,只要没有 commit,都可以通过这个按钮撤销修改,点击该按钮,弹出如下提示框:
这里会列出来所有修改但是没有 commit 的文件,想要撤销哪个文件的修改,就勾选该文件,然后点击 Rollback 按钮就完成了撤销操作。
如果已经 commit 了,那么就需要先打开提交日志,点击如下按钮打开:
也可以直接点击 IDEA 右上角的时钟图标,快速打开提交日志:
提交日志类似下面这样:
此时的回退就分情况了。
首先这个撤销操作分两种:
我们分别来看。
Undo Commit 这个操作只能在最近一次提交上使用,不能在其他提交上使用,最近一次 commit 上,右键单击,如下图:
其他的 commit 上右键单击:
既然如此,我们就来看看最近的一次 commit 如何 Undo Commit。
在最近一次 commit 日志上右键单击后选择 Undo Commit,如下图:
选中后,直接点击 OK,撤销最近一次的 commit。
这就是撤销最近一次 commit,撤销之后,本地的修改相当于变成了已 add 但是未 commit 的状态,此时我们可以继续开发新代码,然后再 commit,再 push;或者也可以像 2.1 小节介绍的那样,继续撤销操作。
我电脑上的 IDEA 在这块操作中有个偶发性问题,就是撤销掉 commit 之后,IDEA 检测不到文件处于未提交状态,需要我把 IDEA 关掉重新打开,IDEA 就能发现文件处于未提交状态了,此时就可以按照 2.1 小节的步骤继续回退了,这块小伙伴们在试验的时候可以留意下。
Revert Commit 这个操作到处都能用,不同于 Undo Commit,Revert Commit 之后,会产生一条提交记录。相当于 Revert Commit 其实也是提交,只不过提交的内容刚好相反,刚好刷掉已有内容。
Revert Commit 操作可以用在所有的日志上,而不仅仅是刚刚提交的 commit。
操作方式如下:
找到需要回滚的地方,右键单击,选择 Revert Commit:
此时会弹出来一个提交的对话框,就是一个普普通通的 commit 对话框,如下:
commit 之后,可以看到内容已经撤销了,提交日志中也多了一条记录,如下图:
如果已经 push 到远程仓库了,怎么撤销?
其实跟 2.2 小节一样,先在本地仓库撤销,撤销完成后,重新修改代码,最后再 force push 就行了,不过 force push 的时候,注意别把同事的代码给覆盖了。
好啦,今天和小伙伴们分享了 Git 中的几个撤销问题,有问题的小伙伴欢迎留言讨论呀~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。