文章目录

  • 1. 基于命令行
    • 1.1 工作区的代码想撤销
    • 1.2 add 到暂存区的代码想撤销
    • 1.3 提交到本地仓库的代码想撤销
    • 1.4 远程仓库撤销
  • 2. 基于 IDEA
    • 2.1 未提交就撤销
    • 2.2 commit 了想撤销
      • 2.2.1 Undo Commit
      • 2.2.2 Revert Commit
    • 2.3 push 了想撤销
  • 3. 小结

上周的文章发了后,有小伙伴问如何在 IDEA 中进行 Git 的版本回退?

其实这个松哥之前写过文章,但是时间久远了,所以今天再和小伙伴们重新捋一捋这个话题,顺便也来聊聊如何在 IDEA 中进行 Git 的版本回退。

Git 中的撤销操作,我们可以归纳为四类:

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

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. 将暂存区的代码撤销到工作区
  2. 将工作区的代码撤销(具体操作和 1.1 小节一致)

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

这里的代码都比较简单,核心的过程就是先执行 git reset HEAD 命令,从暂存区撤销,剩下的操作参考 1.1 小节。

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

同样的,提交到本地仓库的代码一样也可以撤销,我们可以利用 git reset --hard <版本号> 命令来实现版本回退,该命令中的版本号有几种不同的写法:

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

看下面一系列的操作:

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

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

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

  1. 通过 git reset --hard HEAD~1 回到上一个版本:

当然以上操作都是基于命令行的,如果你命令行操作比较熟练的话,其实命令行操作比 IDEA 上点点点要快很多。

1.4 远程仓库撤销

如果代码提交到远程仓库了,想要撤销,那就如 1.3 小节所讲,先在本地仓库撤销,然后 push 到远程仓库即可。

2. 基于 IDEA

看懂了命令行操作,再看基于 IDEA 的操作就容易多了。

2.1 未提交就撤销

对于第一小节的前两种撤销操作,即修改的文件还没 commit,此时想要撤销,方式很简单,点击 IDEA 右上角的撤销按钮:

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

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

2.2 commit 了想撤销

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

也可以直接点击 IDEA 右上角的时钟图标,快速打开提交日志:

提交日志类似下面这样:

此时的回退就分情况了。

首先这个撤销操作分两种:

  • Revert Commit
  • Undo Commit

我们分别来看。

2.2.1 Undo Commit

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 小节的步骤继续回退了,这块小伙伴们在试验的时候可以留意下。

2.2.2 Revert Commit

Revert Commit 这个操作到处都能用,不同于 Undo Commit,Revert Commit 之后,会产生一条提交记录。相当于 Revert Commit 其实也是提交,只不过提交的内容刚好相反,刚好刷掉已有内容。

Revert Commit 操作可以用在所有的日志上,而不仅仅是刚刚提交的 commit。

操作方式如下:

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

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

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

2.3 push 了想撤销

如果已经 push 到远程仓库了,怎么撤销?

其实跟 2.2 小节一样,先在本地仓库撤销,撤销完成后,重新修改代码,最后再 force push 就行了,不过 force push 的时候,注意别把同事的代码给覆盖了。

3. 小结

好啦,今天和小伙伴们分享了 Git 中的几个撤销问题,有问题的小伙伴欢迎留言讨论呀~

IDEA 中如何完成 Git 版本回退?相关推荐

  1. Git版本回退并强制推送到远端

    Git版本回退并强制推送到远端 本文参考廖雪峰的Git教程 前言:本文章解决问题的前提是本人不小心修改了本地代码仓库的最外层目录权限,不知道原权限是什么,导致本地git提示几十个文件被修改过,实际内容 ...

  2. git版本回退简单记录

    简单记录git版本回退的命令,参考的是这篇文章1 首先查看以前存档的版本: git log 1. 知道要回退的版本和现在的版本差了多少代 回退上一代版本(1个以前) git reset –hard H ...

  3. git 版本回退 git reset --hard HEAD

    git 版本回退 git reset --hard HEAD 一不小心用git pull拉取远程仓库代码 ,把本地开发的新代码直接覆盖掉,这时想恢复本地代码要如何操作 1.进入到项目git本地仓库文件 ...

  4. git回退历史版本无法上传_Git系列教程(二):版本库中添加文件、版本回退

    Git系列教程(一):简介.安装.配置我们学习了分布式和版本控制系统的概念.Git具有的8个功能以及如何在Windows上安装Git.进行相关配置并创建版本库. Git版本库中添加文件 Git 的工作 ...

  5. idea中git版本回退

    场景 当我提交了本次修改到本地和远程分支后,发现我本次提交还少了一些修改内容,或者说本次修改是完全错误的,然而也push到远程仓库去了.如何回退? 问题 已经提交到仓库(本地和远程仓库)的内容如何利用 ...

  6. idea中 git版本回退

    1.版本回退 之 Reset Type 有四种: 1.1.soft ①移动本地库HEAD指针 意思就是,回滚后,仅仅是把本地库的指针移动了,而暂存区和你本地的代码是没有做任何改变的.而你上次改动已提交 ...

  7. Git版本回退之 reset 和 revert

    在开发过程中,可能会遇到过错误提交的情况.这种情况下,先不要着急,可以通过以下两个命令来帮助你优雅的实现版本回退. git reset 假如现在有如下几个提交: 其中:A 和 B 是正常提交,而 C ...

  8. git版本回退命令_Git学习版本回退和管理文件的修改及删除操作

    版本回退 前面我们成功的提交了一次mygit.txt,下面咱对它进行修改,内容如下: Hello Git Git is so easy. 然后用git status来跟踪该文件的状态: 可以看到hel ...

  9. git版本回退(3)

    现在,你已经学会了修改文件,然后把修改的文件提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control syst ...

  10. Git——版本回退【git reset / git log / git reflog】

    前言:下面是在版本回退中常用的命令. 1. git log -- 查看版本日志 $ git log   HEAD为当前指向的版本指针.使用git log 查看版本日志后,显示了它们的版本号是一系列SH ...

最新文章

  1. 经常使用的时间同步server地址
  2. 【转载】一文彻底拿下Java异常
  3. 2018.12.08 codeforces 946D. Timetable(背包)
  4. 卸载后以前拍的视频会删除吗_可立拍!苹果自己的视频编辑App是一个被忽视的好工具...
  5. webview取java的参数值_Android 显示 WebView ,加载URL 时,向webview的 header 里面传递参数...
  6. 使用Pytorch DataLoader快捷封装训练数据、测试数据的X与Y
  7. 为什么很多人只提苹果手机比安卓手机流畅耐用,却不提苹果手机比安卓手机贵几倍?
  8. 网游Server端开发基础
  9. 【react】 flux 的数据修改流程,类似与vuex那样,但是又有区别
  10. axios 跨域传参_axios跨域问题
  11. APT入门知识:抗击APT和针对性攻击
  12. 第一、二章 引论、算法分析
  13. FAT32文件系统详解
  14. 第十人理论 - 大前研一 - 专业主义
  15. C 语言判断某年是否为闰年该月有多少天
  16. 模拟新浪微博自动登陆
  17. linux非yum安装svn,linux安装svn(yum安装)
  18. UG/NX二次开发 判断圆柱面是不是孔的方法
  19. 刚学会短视频剪辑的看过来,剪辑顺序你得懂,上手容易效果好
  20. OpenStack Tracker

热门文章

  1. SIMPLE、PISO 、PIMPLE算法浅析
  2. 微信企业号开发常用工具类总结(一)
  3. hyperledger fabric 2.3.3 搭建教程
  4. Linux主目录文件夹英文,中文Ubuntu主目录下的文件夹改回英文
  5. C语言编程>第二十二周 ② 请补充fun函数,该函数的功能是:返回字符数组中指定字符的个数,指定字符从键盘输入。
  6. 在 2040 年前,实现净零碳排放
  7. 如何获取侧面加载的应用程序以显示在Fire Tablets的FreeTime配置文件中
  8. 大数据常用非关系型数据库汇总(NoSQL)
  9. CF855G. Harry Vs Voldemort(边双,并查集,dp)
  10. OA系统的主要功能和作用是什么