Git 版本回退

原文链接:https://mp.weixin.qq.com/s/Rb6fNqvVdfHWRxc7zddPaQ

Git 中的撤销操作,可以分为四类:

  1. 工作区的代码想撤销
  2. add 到暂存区的代码想撤销
  3. 提交到本地仓库的代码想撤销
  4. 远程仓库的代码想撤销

1 基于命令行

1.1 工作区的代码想撤销

可以通过git checkout -- <file>命令来撤销工作区的代码修改。

image

首先执行了git status命令,发现工作区是干净的,然后执行了cat命令,发现文件只有两行内容,然后通过 vi 编辑器向文件中添加一行,保存并退出,退出来之后又执行了git status命令,此时工作区的状态已经发生变化,然后执行了git checkout -- git01.txt命令,表示撤销之前的操作,让git01.txt恢复到之前的状态,该命令执行成功后,再执行cat命令发现文件内容已经恢复了,此时再执行git status命令,状态也恢复了。

1.2 add 到暂存区的代码想撤销

通过以下两个步骤即可:

  1. 将暂存区的代码撤销到工作区;
  2. 将工作区的代码撤销(具体操作和 1.1 一样)。

将暂存区的代码撤销,可以使用git reset HEAD命令实现,如下:

image

核心过程就是先执行git reset HEAD命令,从暂存区撤销,然后参照 1.1 小节命令。

1.3 提交到本地仓库的代码想撤销

可以利用git reset --hard <版本号>命令来实现版本回退,该命令中的版本号有几种不同的写法:

  • 可以使用HEAD^来描述版本,一个^表示前一个版本,两个^^表示前两个版本,以此类推;
  • 也可以使用数字来代替^,比如说前 100 个版本可以写作HEAD~100
  • 也可以直接写版本号,表示跳转到某一个版本处。每次提交后,都会生成一个哈希码作为版本号,所以这里可以直接填版本号,哈希码很长,但是不用全部输入,只需要输入前面几个字符即可。

通过以下几个步骤为例:

  1. 通过git log查看当前提交日志;

image

  1. 通过git reset --hard HEAD^^向前回退两个版本;

image

  1. 查看日志,发现最后一次提交的版本号是695ce1fe,利用git reset --hard 695ce1fe命令回退到之前的状态;

image

  1. 通过git reset --hard HEAD^回退到上一个版本;

image

1.4 远程仓库代码撤销

先在本地仓库撤销,然后 push 到远程仓库即可。

2 基于 IDEA

2.1 未提交就撤销

对于 第一小节基于命令行 的前两种撤销操作,即修改的文件还没 commit,此时想要撤销,非常简单,点击 IDEA 工具栏的撤销按钮即可。

image

如果修改了文件,无论有没有执行git add命令,只要没有 commit,都可以通过撤销按钮来撤销修改,点击该按钮,弹出如下提示框:

image

这里会列出来所有修改但是没有 commit 的文件,想要撤销哪个文件的修改,就勾选该文件,然后点击 Rollback 按钮就完成了撤销操作。

2.2 commit 了想撤销

如果已经 commit 了,那么就需要先打开提交日志,点击如下按钮打开:

image

也可以点击 IDEA 工具栏的时钟图标,快速打开提交日志:

image

提交日志类似下面这样:

image

此时的回退分情况,有两种:

  • Undo Commit
  • Revert Commit

下面分别介绍两种情况。

2.2.1 Undo Commit

这个操作只能在最近一次提交上使用,不能在其它提交上使用,最近一次提交上右键单击,如下:

image

如果在其它的 commit 上单击,如下:

image

既然如此,就来看看如何在最近一次提交上实现 Undo Commit。
在最近一次提交 commit 日志上右键单击选择 Undo Commit,如下:

image

选中后,直接点击 OK,撤销最近一次的 Commit。撤销之后,本地的修改相当于变成了已 add 但是未 commit 的状态,此时可以继续开发新代码,然后再 commit,再 push。

2.2.2 Revert Commit

这个操作到处都能用,不同于 Undo Commit,Revert Commit 之后,会产生一条提交记录。相当于 Revert Commit 其实也是一次提交,只不过提交的内容刚好相反,刚好刷掉已有内容。
Revert Commit 操作可以用在所有的提交日志上,而不仅仅是最近一次的提交。

具体操作步骤如下:

找到需要回退的地方,右键点击,选择 Revert Commit:

image

此时会弹出来一个提交的对话框,就是一个普通的 commit 对话框,如下:

image

commit 之后,可以看到内容已经撤销了,提交日志中也多了一条记录,如下:

image

2.3 push 了想撤销

先在本地仓库撤销,撤销完成后,重新修改代码,最后再 push 即可。

posted @ 2022-03-01 10:46  超级鲨鱼辣椒  阅读(2961)  评论(0编辑  收藏  举报