详解IDEA git分支回退指定的历史版本

所属分类: 网络编程 / 相关技巧 阅读数: 998
收藏 0 赞 0 分享

场景

当我提交了本次修改到本地和远程分支后,发现我本次提交还少了一些修改内容,或者说本次修改是完全错误的,然而也push到远程仓库去了。如何回退?

问题

已经提交到仓库(本地和远程仓库)的内容如何利用IDEA回退到原来指定版本?

方法

有两种方法:1、Revert操作 2、利用IDEA的Reset Head指针

影响

方法1的Revert操作会当成一个新的提交记录,追加到提交日志当中,这样便保留了原来的提交记录。(推荐)

方法2的Reset Head指针,会抛弃原来的提交记录,使Head指针强制指向指定的版本。

实验环境


上图是实验环境。本次实验只操作Readme.md文件。初始化时,master和演示使用的分支“git_demo”都是指向版本一:“版本1:第一次编辑”文本内容。当前操作分支为git_demo。

说明

本次实验环境未必和您的情况完全相符,不过大致思路是相同的。如果您在解决问题过程中遇到冲突,解决就好了。

方法1:Revert操作

当在版本1基础上进行修改内容,并提交本地、远程仓库后,发现提交的内容不是我想要的,或者是完全错误的,需要回退版本1。

步骤

在想要回退历史版本上单击鼠标右键,选择“Revert”(见下图)

这时弹出冲突对话框,双击冲突文件以解决冲突。(见下图)

在解决冲突对话框中,决定最终的版本文件。(见下图)

重新提交到本地仓库(见下图)

Push

同步远程仓库(见下图)


这种回退的好处在于,如果后悔了“回退”这个操作,也可以回退到没有回退之前的版本。因为历史记录还保留提交记录。

方法2:Reset Head指针

当在版本1基础上进行修改内容,并提交本地、远程仓库后,发现提交的内容不是我想要的,或者是完全错误的,需要回退版本1。

步骤在想要回退历史版本上单击鼠标右键,选择“Reset Current Branch to Here”(见下图)

在弹出的git reset 参数类型选择框中,选择Hard(见下图),并Reset

本地仓库回退到了版本1,需要同步远程仓库,执行push操作。

push

后,提示Push拒绝。打开Terminal,在本项目目录下,输入git push -f 强制同步远程仓库。



同步后,会发现,git日志丢失了版本1以后的提交。

总结

  • Revert操作其实就是回退操作,默认是回退到最近一次提交点,也可以回退到指定提交点,就像本次实验演示的。
  • Revert的操作其实也是设置Head指针。
  • 其实比较推荐Revert操作,毕竟可以后悔。方法2中git push -f 强制同步操作并不推荐使用,在团队协作环境中可能会引发问题。
  • 在方法2中,选择git reset参数选择的是hard,这种参数适合场景是我只想回退到指定版本的文本。工作区里的内容可以放弃,版本2完全放弃。其实也可以选择Mixed。Mixed作用是在设置Head指针时,保留当前工作区里的文本内容。这样方便直接修改,适合于提交的内容有误,只想修正回来就可以了这种情况。(对比效果见下图)


在回退过程中,可能您的情况不会像本实验那么简单,也就是说会出现冲突情况。那么只需要解决冲突即可。

结尾

除了Hard和Mixed选项,其它回退选项的效果演示可以访问这里: Git Reset 模式演示

回退版本的方法可能还有很多,本次实验也是片面的。难免有些错误遗漏的地方,还请各位老师们不要吝惜各自的才华,恳请老师们多多指正

更多精彩内容其他人还在看

firefox 扩展开发技巧

firefox 扩展开发
收藏 0 赞 0 分享

php asp.net 比较 [推荐]

如今当提到 Web 开发时,您有许多选择。这些方法中许多都涉及到预处理 - 即,利用特定的标记将代码嵌入到 HTML 页面中
收藏 0 赞 0 分享

UTF-8 BOM 可能导致样式错乱的解决方法

utf-8 是一种在web应用中经常使用的一种 unicode 字符的编码方式,使用 utf-8 的好处在于它是一种变长的编码方式,对于 ANSII 码编码长度为1个字节,这样的话在传输大量 ASCII 字符集的网页时,可以大量节约网络带宽。
收藏 0 赞 0 分享

Web 开发常用工具 大家自己查找下载

看到了Web通信分析工具 这篇文章,除了burpsuite其他我日常都经常使用。于似乎我整理了一下我自己用的其他的WEB开发工具。
收藏 0 赞 0 分享

遇到不能复制的网站怎么办?

有时我们看到喜欢的网页内容时定会产生复制下来为我所用的冲动,不过当你点击鼠标时它却没有任何反应,选择的内容没有任何变化,不禁有点扫兴。不要紧,办法总比困难多!
收藏 0 赞 0 分享

URL 长度有限制吗?

众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用GET方法,传递大量参数推荐使用POST方法。原因是什么呢?
收藏 0 赞 0 分享

声音验证码制作方法

收听验证码已经比较普遍了,使用户看不清楚的情况下可以通过耳朵来收听验证码,但网上搜了很久没看到有具体的制作方法,自己想了想,还是按自己的方法来实现了,呵呵。
收藏 0 赞 0 分享

防范SQL注入式攻击

SQL注入式攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql命令以及进行其他方式的攻击动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。
收藏 0 赞 0 分享

Web 设计与开发者必须知道的 15 个站点

今天读到一篇文章,介绍了15个对 Web 设计与开发师极端有用的站点,里面有不少也是我们一直在使用的,也许对很多人都有用,翻译出来以饷同仁。
收藏 0 赞 0 分享

十分钟内学会 避免用户刷新导致重复POST提交

在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交。
收藏 0 赞 0 分享
查看更多