git教程:reset,revert

我们使用版本控制系统的原因之一,就是希望保存开发开始以来的各种修改,方便找回以前的代码,或去除错误修改。就算是一个人开发,如果没有版本控制系统,我开发进行到一个地方,发现方向不对,要回头时,只能再重新开发,或凭记忆修改代码到以前状态,那简直是噩梦。
本文专门介绍一下后悔药:reset,revert。
先讲一下版本,我们要恢复也要知道恢复到哪个版本,git不像svn有版本号,只有commit ID,就是那一串40位的十六进制字符串,为了方便操作,用HEAD代表最后一次提交,HEAD^表示HEAD的上次提交:
HEAD示意图
当然要表示从最后数第n次提交也可以用,HEAD~n:
HEAD数字示意图
如果只回退最近一次,可以:
git reset HEAD^
或者:
git revert HEAD
这两个效果是等价的,但实现是不同的:
git reset HEAD^
reset 最后一次提交图
git revert HEAD
revert 最后一次提交图
reset是直接把HEAD指向前一个版本,从log里看,没有最后一次提交了。
revert是把最后一次提交的修改撤销,再提交服务器,从log里看,多了一个回退提交,原提交也在。
还有,reset默认不修改工作区文件,回退后,工作区文件还是原来的,没回退。
如果加 --hard 会把工作区也回退。
revert默认就把修改合并提交的,出了冲突,才需求手工修改提交。

注意,reset作用是回卷,revert是撤销,只有是最后一次提交,他们才是等价的。下面是参数是第二次提交的情况:
git reset HEAD~3
reset HEAD~3 图

git revert HEAD~3

revert HEAD~3 图

可以看到如果参数是一个版本,revert是只撤销这个版本作的修改,再合并提交。
而reset则是回退到这个版本,这个版本后的修改都丢掉。
如果从最终结果看,下面命令是等价的:
git reset HEAD~3

git revert HEAD~3..HEAD

revert HEAD~3..HEAD 图

revert后面 <版本a>..<版本b>,从<版本b>开始连续回退到<版本a>,但不包括<版本a>,实际也是一个版本一次的回退,每次都会让你输入提交注释。
分别执行上面指令,如果看log,会发现,reset后少了3个log,revert后多了3个log。
revert后如果不想撤销了,看一下log,reset回去就可以了。
reset后后悔了怎么办,没有log了!没关系,下面命令可以查到更多commit ID:
git reflog
reflog 图
再输入:
git reset <commit ID>

这个commit ID是上次reset前的ID,就可以回退会reset以前状态了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值