idea中回退远程push过的提交(详细图文操作)

目录

  • git基本知识回顾
    • git中本地文件保存的3个地方
      • 工作区
      • 暂存区
      • 本地仓库
      • 代码提交到远程仓库的流转
    • reset命令的3个参数
      • soft
      • mixed
      • hard
  • 具体操作
    • 模拟两次提交
    • 远程分支回退到第一次提交
      • 第一次reset hard
      • 第二次reset soft/mixed

git基本知识回顾

git中本地文件保存的3个地方

工作区

就是我们写代码的地方,Ctrl + s保存之后存储内容的地方。

暂存区

每次执行git add 或 git delete 命令时,就是把工作区已经保存的内容,存储到暂存区。

本地仓库

每次执行git commit 时,会把暂存区的内容存储到本地仓库,同时创建一个commit,记录当前修改并把当前HEAD执行最新的提交。

代码提交到远程仓库的流转

工作区 -》 暂存区(add) -》本地仓库(commit) -》远程仓库(push)
在idea中,进行commit提交时,会自动帮我们执行add 命令,所以我们平时感知不到暂存区的存在,但其实由工作区commit提交到本地仓库,中间是需要经过暂存区的。

reset命令的3个参数

reset命令可以将HEAD移动到指向某个指定的commit位置,该命令可以跟3种参数soft、mixed、hard

soft

soft 表示只把 HEAD 移动一下,这样后面做任何操作都以 HEAD 为基础修改,但是暂存区和工作区都不管。

mixed

mixed 表示除了上述修改,还把暂存区也还原成当时的样子。

hard

hard 则表示,除了上述两项修改,还把工作区也还原成当时的样子。

具体操作

要把已经push到远程的提交回退到之前的某个提交,需要执行两个reset命令,一次hard,一次soft

模拟两次提交

第一次提交
idea中回退远程push过的提交(详细图文操作)_第1张图片
第二次提交
idea中回退远程push过的提交(详细图文操作)_第2张图片
可以看到本地和远程的HEAD都指向第二次提交的commit(紫色代表远程分支,绿色代表本地分支)

远程分支回退到第一次提交

第一次reset hard

先在本地分支的第一次提交的commit 执行reset hard
idea中回退远程push过的提交(详细图文操作)_第3张图片
idea中回退远程push过的提交(详细图文操作)_第4张图片
可以在git的consloe 控制台看到刚才操作对应具体的执行命令 就是reset --hard commit ID
idea中回退远程push过的提交(详细图文操作)_第5张图片
此时,本地的HEAD已经指向第一次提交的commit,并且暂存区、工作区的代码都回退到了第一次提交的内容
idea中回退远程push过的提交(详细图文操作)_第6张图片
本地的提交记录已经没有第二次提交的记录了,通过远程提交记录我们可以看到,远程分支的HEAD是第二次提交,本地的HEAD是第一次提交,本地落后于远程,所以此时push是会被远程拒绝的。
idea中回退远程push过的提交(详细图文操作)_第7张图片
idea中回退远程push过的提交(详细图文操作)_第8张图片

第二次reset soft/mixed

此时需要将本地的HEAD也指向远程的HEAD所在的commit,并且本地暂存区的内容应该还是第一次提交的内容。所以应该在远程分支的第二次提交commit上进行reset soft。
(为什么mixed也行?因为mixed虽然会把暂存区覆盖为第二次提交的内容,但是工作区还是第一次提交的内容,idea在提交commit时会再次自动把工作区的内容覆盖暂存区,所以最终暂存区还是第一次提交的内容)
idea中回退远程push过的提交(详细图文操作)_第9张图片
idea中回退远程push过的提交(详细图文操作)_第10张图片
执行完reset soft命令后,本地的HEAD也指向了第二次提交的commit,和远程的HEAD一样了,所以此时就可以愉快的提交并push了。

idea中回退远程push过的提交(详细图文操作)_第11张图片
搞定!
最后再来看一下console中刚才一连串操作的具体执行git命令
此处也可以证实,idea在commit之前,会自动把工作区的内容add到暂存区
idea中回退远程push过的提交(详细图文操作)_第12张图片

你可能感兴趣的:(git,idea,intellij-idea,java,git)