文章目录
Undo Commit,Revert Commit,Drop Commit的区别
是否删除对代码的修改是否删除Commit记录是否会新增Commit记录Undo Commit不会未Push会,已Push不会不会Revert Commit会不会会Drop Commit会未Push会,已Push不会不会
一、前言
某次在idea中执行commit后(未push), 发现提交代码错误了想撤回,此篇文章整理这种情况下如何撤回。
如下图:(commit提交了一次测试记录(未push),新增了Test.java文件)
二、退回commit(未push)
2.1、方式一:undo commit
适用情况:代码修改完了,已经Commit了,但是还未push,然后发现还有地方需要修改不想提交本次记录了。这时可以进行Undo Commit,修改后再重新Commit。
如果已经进行了Push,线上的Commit记录还是会存在的
简单来说,就是撤销了你Commit的这个动作。详细解释下:
1、首先,对项目进行了代码修改,然后进行commit操作。
2、确认Commit之后(未进行push)
3、进行Undo Commit操作
右键要撤销的记录,选择undo commit
执行后和未Commit之前完全一样, 而且commit记录也没了
2.2、方式二: reset current branch to here
适用情况:已commit未push
右键错误记录的上一次记录,然后选择reset current branch to here,选择Mixed
撤销后会把commit记录删除掉,提交的文件进入到Unversioned Files目录中
- Soft:回滚到指定版本,并保留所有更改,这些更改将被重新提交。使用这种模式,你可以撤销已经提交的更改,然后重新提交。
- Mixed:回滚到指定版本,并保留所有更改,但是更改将不会被重新提交(文件进入到Unversioned Files中)。使用这种模式,你可以撤销已经提交的更改,并保留这些更改,以备后续修改和提交。
- Hard:回滚到指定版本,并删除指定版本之后的所有更改。使用这种模式,你可以完全撤销指定版本之后的所有更改。
- Keep:回滚到指定版本,但是保留指定版本之后的更改。使用这种模式,你可以撤销指定版本之后的更改,并保留这些更改,以备后续修改和提交。
keep和hard撤销后会把文件也删除掉,强烈建议不要使用或者慎用
三、退回push
3.1、方式一:Reset HEAD
注意:此退回是不管你commit没push,还是commit已经push好了,都会退回到你指定的版本号.
步骤1.idea找到项目commit提交记录列表:
项目名右键—Git—Show History 或者idea下方的Version Control都可以打开历史提交的记录信息
步骤2.选择需要回退到的版本号:
例如我最新代码是Test2,需要回退到上一次Test1提交的版本
选择对应提交的记录右击——Copy Revision Number ; 复制commit的编号
步骤3.回退到对应的版本
项目名右击——Git——Repository——Reset HEAD
步骤4.输入需要回退的commit编号
第一步弹框中Reset Type选择——第2步复制的commit编号——Reset
这个的Reset Type有三个可选,按你自己意愿选择可选参数:
首先了解:
工作区 - 暂存区 - 本地仓库
代码编写及修改是在工作区 - git add 将本地修改添加到暂存区 - git commit 将暂存区中的内容提交到本地仓库
- mixed 不删除工作空间改动代码,
撤销commit
和撤销git add .
操作,回退到工作区 - soft 不删除工作空间改动代码,
撤销commit
,不撤销git add .
操作, 回退到git commit之前,此时处在暂存区。(即执行git add 命令后) - hard
撤销commit,撤销add,删除本地改动代码。``````(三者的改变全都丢失,即代码的修改内容丢失,直接回退到某个版本;因此我们修改过的代码就没了,需要谨慎使用)
我这里是想回退到Test1提交的记录,并且Test1之后的所有代码完全不要了,所以选择了Hard
步骤5.push回退的代码
IDEA下方选择Terminal——命令行输入git push -f ;强行推送到远程仓库
步骤6.完成
可见代码提交记录中已经没有Test2提交的记录了,已经回退到Test1版本了
可以看见, 刚刚的提交已经被撤销了,但是我本地修改的其他代码内容也被覆盖了,直接没有了,所以一定要慎用,如果你此时工作区还有其他功能未提交的代码,就都会被删除
版权归原作者 五月天的尾巴 所有, 如有侵权,请联系我们删除。