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

场景

当我提交了本次修改到本地和远程分支后,发现我本次提交还少了一些修改内容,或者说本次修改是完全错误的,然而也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 模式演示

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

到此这篇关于详解IDEA git分支回退指定的历史版本的文章就介绍到这了,更多相关IDEA git分支回退指定历史版本内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • idea切换git地址并刷新右下角git分支

    1  点击VCS-Git-Remotes... 2 点击Edit修改输入新地址即可,name可以自己写 3 修改成功以后,点击VCS-Git-fetch,刷新远程修改到本地,此时点击右下角git分支树,就是最新的分支树了 IDEA git修改远程仓库地址的三种方法 1.修改命令 git remote set-url origin <url> 2.先删除后添加 git remote rm origin git remote add origin [url] 例如: 方法3.直接修改config文

  • idea+git合并分支解决冲突及详解步骤

    Git分支详解参考: 分支管理组成 1.1.master主干 在版本管理中,代码库应该仅有一个主干.此主干是和当前生产保持一致的,是可用的.稳定的可直接发布的版本,不能再主干上进行任何开发操作.git主干的名字,默认叫做 master,它是自动建立的. 1.2.develop主开发分支 因为不能在主干master上进行开发,那么就需要在基于主干master的基础上,创建一个开发主分支develop,开发主分支develop的代码永远是最新的,所有的新功能都是以此分支为基础进行开发的,该分支只是做

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

    场景 当我提交了本次修改到本地和远程分支后,发现我本次提交还少了一些修改内容,或者说本次修改是完全错误的,然而也push到远程仓库去了.如何回退? 问题 已经提交到仓库(本地和远程仓库)的内容如何利用IDEA回退到原来指定版本? 方法 有两种方法:1.Revert操作 2.利用IDEA的Reset Head指针 影响 方法1的Revert操作会当成一个新的提交记录,追加到提交日志当中,这样便保留了原来的提交记录.(推荐) 方法2的Reset Head指针,会抛弃原来的提交记录,使Head指针强制

  • 详解IDEA Git Reset 选项说明

    1 . 目标 演示下图的git reset 各选项的效果. 2. Git Reset操作说明 图中说明: his will reset the current branch head to the selected commit, and update the working tree and the index accoding to the seleted mode. 意思是: 该操作会重置当前分支指针到所选择的提交点,并且更新记录点和根据所选选项更新index状态. 这句话意味着该项操作会

  • Django模板标签中url使用详解(url跳转到指定页面)

    django {% url %} 模板标签使用 inclusions/_archives.html ... {% for date in date_list %} <li> <a href="{% url 'blog:archive' date.year date.month %}" rel="external nofollow" > {{ date.year }} 年 {{ date.month }} 月 </a> </l

  • 详解 maven的pom.xml用<exclusion>解决版本问题

    详解 maven的pom.xml用<exclusion>解决版本问题 用maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些不需要同时下载的依赖jar . 比如配置struts-core,它会同时下载javassist和asm相关的jar,但版本又不够新,这时可以排除它们: <!-- Struts2 --> <dep

  • 详解如何在Android studio中更新sdk版本和build-tools版本

    一.首先看下Android开发用到的sdk目录: build-tools 保存着一些Android平台相关通用工具,比如adb.和aapt.aidl.dx等文件.  aapt即Android Asset Packaging Tool , 在SDK的build-tools目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件.  Adb 即android debug bridge 管理模拟器和真机的万能工具,ddms 调试环境 

  • 详解正则表达式后面不要包含指定的字符串内容

    以前只会/<abc(?!def).+>/.exec("<abcdef>\n<abczzz>"),匹配到<abczzz>,这种简单的固定写法,但实际使用次数几乎趋近于0. 很多场景不能写死abc,顺理成章的就写成了/<.+(?!def).+>/.exec("<abcdef>\n<abczzz>"),咦?咋把前面的匹配到了!从入门到放弃. 昨天(2019-04-07)随手写了一下/<

  • 详解Maven settings.xml配置(指定本地仓库、阿里云镜像设置)

    一.settings.xml文件会在两个目录下存在: 1.Maven安装目录(全局):%MAVEN_HOME%\conf\settings.xml 2.用户安装目录(用户):${user.home}\.m2\settings.xml 第一个是全局配置,第二个是用户配置.当两者都存在,它们的内容将被合并,特定于用户的settings.xml文件占主导地位. 如果从头开始创建用户特定的配置,可以将全局的settings.xml复制到${user.home}\.m2目录下. 我的Maven安装目录:(

  • 详解Python中open()函数指定文件打开方式的用法

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'->二进制模式,比如打开图像.音频.word文件. '+'->更新(可读可写) 这个带'+'号的有点难以理解,上代码感受下. with open('foo.txt', 'w+') as f: f.write('bar\n') f.seek(0) data = f.read() 可以看到,上面这段代码

  • 详解如何使用nvm管理Node.js多版本

    Node.js版本管理工具.Git地址:https://github.com/nvm-sh/nvm 安装nvm Mac OS: 如果已经安装了node,在安装nvm之前,不需要卸载这个版本的node.这个版本的node后续会成为nvm中的system版本的node. 具体步骤如下: 首先安装C++编译器,使用XCode 的命令行工具,在Terminal中输入: xcode-select --install 然后在Terminal里输入: curl -o- https://raw.githubus

  • 详解Linux文件系统:ext4及更高版本

    今天带大家了解一下ext4的历史,包括其与ext3和之前的其它文件系统之间的区别 大多数现代Linux发行版默认为ext 4文件系统,就像以前的Linux发行版默认为ext3.ext2,以及-如果追溯到足够远的话-ext. 如果您是Linux新手或者是文件系统新手,您可能会想知道ext 4给表带来了什么,而ext3却没有.考虑到诸如btrfs.XFS和ZFS等备用文件系统的新闻报道,您可能还想知道ext4是否还在积极开发中. 我们不能在一篇文章中涵盖所有关于文件系统的内容,但是我们将尝试让您了解

随机推荐