详解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状态。

这句话意味着该项操作会影响两件事:提交的记录 和 当前工作区中的文件状态。

3. 环境说明

为了简化演示,本次使用master分支。master分支初始状态为下图所示:

本篇各个选项的效果演示均在“回退到版本1”这个需求下进行。

弹出选项框

4. 各选项效果说明

4.1 Soft

Soft选项:在选择的回退点之后的所有更改将会保留并被git追踪下来。这就意味着可以在 Version Control 的 Local Changes 面板中查看到它们。

创建新文件demo.txt 并index。使得demo.txt文件能够被git追踪版本。

此时我们是在版本2的工作区基础上进行创建的demo.txt,此时我们想要回退到版本1,并使用Soft模式回退。回退的结果如下:

4.2 Mixed

Mixed模式:在选择的回退点之后的所有更改将会保留但不会被git追踪下来。

创建新文件demo.txt 并index。使得demo.txt文件能够被git追踪版本。

此时我们是在版本2的工作区基础上进行创建的demo.txt,此时我们想要回退到版本1,并使用Mixed模式回退。效果如下:

4.3 Hard

Hard模式:在选择的回退点之后的所有更改都会被丢弃。(包括被追踪的和已提交的文件)

在版本2基础上新增文字,形成未提交的版本3.

回退到版本1,以Hard模式。

4.4 Keep

Keep模式:在选择的回退点之后的所有已提交的更改会被丢弃。但本地修改的会被完整地保存下来。

在版本2基础上新增文字,形成未提交的版本3.

选择了Keep模式进行回退到版本1的效果如下:

说明:上图出现了Git Reset Problem对话框是因为Keep模式会保留工作区修改的内容,所以在回退到指定的提交点后,Idea接下来要处理就是这些在工作区修改的内容,所以询问用户是否有必要保留这些内容。如果没必要保留,就完全可以Hard reset;如果有必要,通常情况下下一步就会需要解决冲突问题。

Hard Reset效果如 4.3 所示,点击Smart Reset后效果如下:

没错,这里的stash 和 unstash 都是自动完成的。

说明:用户也可以自己手动 stash 和 unstash操作,类似压栈和弹栈操作。这一机制在“暂时不想提交现已修改的,但现在必须马上在未修改之前的版本上着手开发另一套事情”的尴尬场景下,可以帮助我们有一个解决方法。这一概念像CPU被中断后如何保存中断现场,在处理完其他任务后,能够恢复当时现场。这里也是:当前开发版本被中断后如何保存当前未提交内容,在开发完成其他事情后,再恢复到这些内容。

5. 总结

Soft:在选定提交点之后所做的所有更改都将被暂存(这意味着可以到 Version Control 窗口(Alt+9)的Local Changes 选项卡,以便您可以查看它们,并在必要时稍后提交)。

Mixed:在所选提交之后所做的更改将被保留,但不会暂存以进行提交。

Hard:在所选提交之后所做的所有更改都将被丢弃(已暂存的和已提交的)。

Keep:在选定的提交之后所做的提交更改将被丢弃,但本地更改将保持不变。

如果需要使用IDEA 进行版本回退可以访问 IDEA git分支回退指定的历史版本

到此这篇关于详解IDEA Git Reset 选项说明的文章就介绍到这了,更多相关IDEA Git Reset 选项内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Git恢复之前版本的两种方法reset、revert(图文详解)

    一.问题描述 在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(revert). 二.背景知识 git的版本管理,及HEAD的理解 使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支.如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支.有一个HEAD指针指向当前分支(只有一个分支的情况下

  • git revert和git reset的区别详解

    git revert和git reset的区别 git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留 git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区 具体一个例子,假设有三个commit, git st: commit3: add test3.c commit2: add test2.c commit1: add test1.c 当执行git revert HEAD~1时, commit2被撤销

  • Git撤销&回滚操作(git reset 和 get revert)

    git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的. 暂存区:已经 git add xxx 进去,且未 git commit xxx 的. 本地分支:已经git commit -m xxx 提交到本地分支的. 代码回滚 在上传代码到远程仓库的时候,不免会出现问题,任何过程都有可能要回滚代码: 1.在工作区的代码 git checkout -- a.txt # 丢弃某个文件,或者 git chec

  • 详解git reset --hard 和 git reset --soft区别

    有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令. 1.二者区别: git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级.如果还要提交,直接commit即可: git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉: 2.具体用法如下: 使用git log命令查看本地的所有提交 现在想

  • 详解git reset 加不加 --hard的区别

    通常我们提交代码一般都是 git add ,git commit -m,   git push的这么个流程.添加到暂存区,提交到git库生成版本号,push到远程仓库以供他人可以使用.这是一个完整的且非常顺利的流程.但是往往实际开发中并不是这么顺利,总会出现这样或那样的问题. git reset就是当我们提交了错误的内容后进行回退使用的命令. git reset 版本号,就是回退到该版本号上. 通常我们使用 git reset HEAD就是回退到当前版本.git reset 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状态. 这句话意味着该项操作会

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

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

  • git 删除分支和回滚的实例详解

    git 删除分支和回滚的实例详解 [git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id [本地代码库回滚]: git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~3:将最近3次的提交回滚 [远程代码

  • shell字符截取命令之cut命令的实例详解

    shell字符截取命令之cut命令的实例详解 一 语法 cut [选项] 文件名 选项: -f 列号:提取第几列 -d 分隔符:按照指定分隔符分割列 二 实战 [root@localhost ~]# cat student.txt 1 furong F 85 2 fengj F 60 3 cang F 70 [root@localhost ~]# cut -f 2 student.txt furong fengj cang [root@localhost ~]# cut -f 2,4 stude

  • 一天一个shell命令 linux文本操作系列-head,tail命令详解

    head命令中文介绍: 用法:head [选项]... [文件]... 将每个指定文件的头10 行显示到标准输出. 如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头. 如果不指定文件,或者文件为"-",则从标准输入读取数据. 长选项必须使用的参数对于短选项时也是必需使用的. -c, --bytes=[-]K 显示每个文件的前K 字节内容: 如果附加"-"参数,则除了每个文件的最后K字节数据外 显示剩余全部内容 -n, --lines=[-]K 显示每个文

  • elementUI select组件使用及注意事项详解

    elementUI select组件使用详解 动态生成option选项 option选项绑定对应的文本值和value值 作为表单项目,新增.编辑功能 对选项改变后触发相关事件 <div id="app"> <el-form :model="form" ref="form" label-width="100px" class="demo-ruleForm"> <el-form-i

  • Vue props用法详解(小结)

    Vue props用法详解 组件接受的选项之一 props 是 Vue 中非常重要的一个选项.父子组件的关系可以总结为: props down, events up 父组件通过 props 向下传递数据给子组件:子组件通过 events 给父组件发送消息. 父子级组件 比如我们需要创建两个组件 parent 和 child.需要保证每个组件可以在相对隔离的环境中书写,这样也能提高组件的可维护性. 这里我们先定义父子两个组件和一个 Vue 对象: var childNode = { templat

随机推荐