关于IDEA中Git版本回滚整理

Git分区理解

git的版本回滚本质上就是回滚不同的分区,所以咱们有必要简单了解一下git的分区。git在本地有三大分区:暂存区、工作区、版本库。

暂存区: add后的代码,绿色。

**工作区:**正在编写,还未add的部分,红色。

**版本库:**commit后的代码,灰色。

在IDEA中,在loacl changes中可以看到在工作区中和暂存区中的内容:

未commit时,进行回滚

已经add到暂存区,但是未commit到本地版本库的改动有两种:

1、新增的文件

2、修改的文件

新增的文件直接删除即可,如果是修改的文件,使用roll back来回滚。在local change里面,选择想要rollback的文件即可:

已经commit暂未push,进行回滚

undo commit

commit到本地版本库并且还未push的代码,可以在log里右击单次提交进行undo commit:


注意:

undo commit只能从最后一次commit开始回滚,undo commit后会要求选择一个变更列表来存放回滚后的内容,可以自己新建一个,比如此处的commit test,也可以在下拉框里选择一个已经存在的,如果是自己新建的变更列表,勾选了set active选项,后续的变动也会存放到该变更列表中:

你会看到多了一个变更列表:

变更列表有什么作用?

其实变更列表可以把它视为一个命名空间,就是用来做资源隔离的,在进行commit的时候需要下拉选择不同的变更列表来进行提交:

reset

有时候我们需要直接将本地的代码回滚到版本库的某一个版本,这时候可以使用reset来进行回滚。reset有几种模式:

soft,将版本回滚,工作区不动,暂存区=原来的+回滚后和回滚前的版本差异。

mixed,将版本回滚,回滚到了所有 git add 和 git commit 的命令执行之前。暂存区变为空,变更全部到了工作区。

hard,将版本回滚,将所有工作区和暂存区的文件修改全部清空,是真正的覆盖,不能找回了。

keep,将版本回滚,将所有commit的内容丢弃掉,未commit的内容保留。

在log上选择要回滚到的具体版本:

reset时会要求选择回滚的模式:

已commit&push,进行回滚

对commit&push的内容进行回滚其实就是对远端仓库的代码版本进行回滚,在实际开发中偶尔会将内容误推送到了远端仓库上去。比如commit的message写错了,查看log的时候才发现,比如不小心将本地还没有开发完成的代码推送到远端仓库了,由或者合并冲突或者分支的时候合并错了...等等这些情况都要我们对远端仓库的代码进行回滚。

回滚的方式其实很简单,就是将本地的代码版本回滚到指定版本(至于是用revert还是reset,看自己),然后将本地的版本用git push -f强推到远端。

在IDEA中可以在terminal中执行指令:

写在最后

Git操作是开发人员最基础的操作,但是大多数人只懂得普通的操作,像回滚这一类总是以为不难,但是出问题的时候又去百度,这个还是扎扎实实掌握一下。有益无害吧,不然就算你的编码水平还可以,一般也会被认为很菜鸡,那就不太舒服了。

好了,今天的内容就分享到这里,觉得还算有用的铁子们帮忙一键三连。另外,推荐一个新号"韭盾专栏",主要用于整理一些上市公司的基本面的,人活资本市场中,多看点实在的东西总是有好处的,至少侃侃而谈的时候你可能在无形中给人留下与众不同的印象。

相关推荐
晓理紫4 小时前
使用git lfs向huggingface提交较大的数据或者权重
git
wrx繁星点点4 小时前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式
我不是程序猿儿5 小时前
【GIT】sourceTree的“当前分支“,“合并分支“与“检出分支的区别
git
尘浮生12 小时前
Java项目实战II基于Spring Boot的问卷调查系统的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
_OLi_12 小时前
IDEA中新建与切换Git分支
java·spring boot·git
心安成长15 小时前
IntelliJ IDEA快速接入LLMs大模型API
java·ide·intellij-idea
PyAIGCMaster16 小时前
ubuntu下安装 git 及部署cosyvoice(1)
git
维__kxs766717 小时前
小程序 + AI 自动直播:一部手机开启抖音挂载小程序流量主变现之旅
git·eclipse
37_oC1 天前
Idea自动生成mysql表DML语句
mysql·intellij-idea·dml
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 天前
GIT GUI和 GIT bash区别
开发语言·git·bash