章
目
录
在使用git进行版本控制与管理的过程中,我们经常会发现有时候由于粗心导致代码提交出错,不应该commit的代码commit到了对应的分支,我们该如何撤回这部分误提交的代码呢?答案是可以通过git reset
指令来实现代码回滚,至于具体的用法,下面潘老师来以一个案例来演示给大家看下。
在使用前,建议大家先了解下git的3个本地工作区+1个远程库之间的关系,可以看这篇文章:Git本地3个工作区域详解及如何回滚,还搞不懂git建议看看
git reset指令三种用法区别与说明
git reset
三种模式分别为 : mixed
(默认)、soft
和hard
:
1、git reset --soft
:代表将某个commit id
之后的变更内容全部放到暂存区中。
2、git reset --mixed
:将某个commit id
之后的变更内容全部放到工作区中。默认方式,不写--mixed
就是默认这一种。
3、git reset --hard
:将某个commit id
之后的变更内容全部丢弃。
所谓commit id
,是指每次提交生成的一个id,通过git log
指令可以查看。
实例演示
第1步:查看commit id
我们先看下当前commit id
的值为2c2a0278e849b4ab7f2962b5e9c56390ef16d37c
此时,远程仓库和本地仓库一样,都只有一个DemoApplication类。
第2步:创建一个类并commit,但不push
这里我新建了一个名为GitCommit的类,并进行了commit操作,但未push到远程,此时该类在我的本地库,现在可以进行撤回测试。
1、撤回到工作区:
git reset --mixed 2c2a0278e849b4ab7f2962b5e9c56390ef16d37c
通过上面操作发现,GitCommit类已经回到了工作区,因为GitCommit类是在该commit id之后提交的,所以直接撤回到到工作区。
第4步:再新建一个类,并将该类commit
我们再新建一个一个GitCommit2类,并将其commit
第5步:撤回到暂存区
git reset --soft 2c2a0278e849b4ab7f2962b5e9c56390ef16d37c
第6步:再新建一个类,并将该类push
我们再新建一个GitCommit3类,并将其push,然后将GitCommit类进行commit但不push,将GitCommit2保持add状态即可
第7步:测试hard撤回
git reset --hard 2c2a0278e849b4ab7f2962b5e9c56390ef16d37c
我们发现在该commit id 之后的所有的代码(我们这里是3个类)全部没了,恢复到了最开始的状态。
但是,我们发现,远程库中已push的GitCommit3类还是存在的。也就是说hard虽然会回退已提交的,并清除本地文件,但不会影响已push到远程仓库的。
甚至我们还可以通过git pull
把GitCommit3文件再拉取下来,也就是说先git resset –hard,然后再拉取下,可以删除本地仓库、暂存区、工作区等未提交到远程的所有文件,然后把已提交的文件还原。这里拉取就不再演示了
补充
快捷使用,可以回退到上个版本,上上个版本等,指定commit id也可以只写前几位即可。下面以git reset --hard
为例
//退回到相对于当前版本的上一个版本 HEAD 表示当前版本 git reset --hard HEAD^ //退回到相对于当前版本的上上一个版本 HEAD 代表当前版本 git reset --hard HEAD^^ //退回到相对于当前版本的上 100 个版本去 HEAD 表示当前版本 git reset --hard HEAD~100 //退回到指定的版本 这里不需要全部写commit id Git 回去自动适配 git reset --hard 3628164
思考
那么该如何撤销已push的代码呢?看下面这篇文章吧。
文章目录前置说明 操作步骤 第1步:查看git提交日志 第2步:将旧分支代码撤回暂存区 第3步:切换新分支 第 […]
以上就是关于Git如何实现代码撤回操作的全部详解,关于通过reset指令回滚误提交代码的操作你学会了吗?