Git 版本回退
原文链接:https://mp.weixin.qq.com/s/Rb6fNqvVdfHWRxc7zddPaQ
Git 中的撤销操作,可以分为四类:
- 工作区的代码想撤销
- add 到暂存区的代码想撤销
- 提交到本地仓库的代码想撤销
- 远程仓库的代码想撤销
1 基于命令行
1.1 工作区的代码想撤销
可以通过git checkout -- <file>
命令来撤销工作区的代码修改。
首先执行了git status
命令,发现工作区是干净的,然后执行了cat
命令,发现文件只有两行内容,然后通过 vi 编辑器向文件中添加一行,保存并退出,退出来之后又执行了git status
命令,此时工作区的状态已经发生变化,然后执行了git checkout -- git01.txt
命令,表示撤销之前的操作,让git01.txt
恢复到之前的状态,该命令执行成功后,再执行cat
命令发现文件内容已经恢复了,此时再执行git status
命令,状态也恢复了。
1.2 add 到暂存区的代码想撤销
通过以下两个步骤即可:
- 将暂存区的代码撤销到工作区;
- 将工作区的代码撤销(具体操作和 1.1 一样)。
将暂存区的代码撤销,可以使用git reset HEAD
命令实现,如下:
核心过程就是先执行git reset HEAD
命令,从暂存区撤销,然后参照 1.1 小节命令。
1.3 提交到本地仓库的代码想撤销
可以利用git reset --hard <版本号>
命令来实现版本回退,该命令中的版本号有几种不同的写法:
- 可以使用
HEAD^
来描述版本,一个^
表示前一个版本,两个^^
表示前两个版本,以此类推; - 也可以使用数字来代替
^
,比如说前 100 个版本可以写作HEAD~100
; - 也可以直接写版本号,表示跳转到某一个版本处。每次提交后,都会生成一个哈希码作为版本号,所以这里可以直接填版本号,哈希码很长,但是不用全部输入,只需要输入前面几个字符即可。
通过以下几个步骤为例:
- 通过
git log
查看当前提交日志;
- 通过
git reset --hard HEAD^^
向前回退两个版本;
- 查看日志,发现最后一次提交的版本号是
695ce1fe
,利用git reset --hard 695ce1fe
命令回退到之前的状态;
- 通过
git reset --hard HEAD^
回退到上一个版本;
1.4 远程仓库代码撤销
先在本地仓库撤销,然后 push 到远程仓库即可。
2 基于 IDEA
2.1 未提交就撤销
对于 第一小节基于命令行 的前两种撤销操作,即修改的文件还没 commit,此时想要撤销,非常简单,点击 IDEA 工具栏的撤销按钮即可。
如果修改了文件,无论有没有执行git add
命令,只要没有 commit,都可以通过撤销按钮来撤销修改,点击该按钮,弹出如下提示框:
这里会列出来所有修改但是没有 commit 的文件,想要撤销哪个文件的修改,就勾选该文件,然后点击 Rollback 按钮就完成了撤销操作。
2.2 commit 了想撤销
如果已经 commit 了,那么就需要先打开提交日志,点击如下按钮打开:
也可以点击 IDEA 工具栏的时钟图标,快速打开提交日志:
提交日志类似下面这样:
此时的回退分情况,有两种:
- Undo Commit
- Revert Commit
下面分别介绍两种情况。
2.2.1 Undo Commit
这个操作只能在最近一次提交上使用,不能在其它提交上使用,最近一次提交上右键单击,如下:
如果在其它的 commit 上单击,如下:
既然如此,就来看看如何在最近一次提交上实现 Undo Commit。
在最近一次提交 commit 日志上右键单击选择 Undo Commit,如下:
选中后,直接点击 OK,撤销最近一次的 Commit。撤销之后,本地的修改相当于变成了已 add 但是未 commit 的状态,此时可以继续开发新代码,然后再 commit,再 push。
2.2.2 Revert Commit
这个操作到处都能用,不同于 Undo Commit,Revert Commit 之后,会产生一条提交记录。相当于 Revert Commit 其实也是一次提交,只不过提交的内容刚好相反,刚好刷掉已有内容。
Revert Commit 操作可以用在所有的提交日志上,而不仅仅是最近一次的提交。
具体操作步骤如下:
找到需要回退的地方,右键点击,选择 Revert Commit:
此时会弹出来一个提交的对话框,就是一个普通的 commit 对话框,如下:
commit 之后,可以看到内容已经撤销了,提交日志中也多了一条记录,如下:
2.3 push 了想撤销
先在本地仓库撤销,撤销完成后,重新修改代码,最后再 push 即可。
作者:超级鲨鱼辣椒
转载请注明原文链接:https://www.cnblogs.com/jinzlblog/p/15949162.html