git reset 与git rever

reset和revert都可以用来回滚代码。但他们是有区别的,准确来说,reset是用来"回退"版本,而revert是用来"还原"某次或者某几次提交。

听起来有点绕,怎么去理解他们呢?

比如在master分支,有以下提交历史:

Administrator@MS-OXKAVLTCDZIR MINGW64 ~/Desktop/repo (master)
$ git log --oneline
4a3c9fa (HEAD -> master, origin/master, dev) 第五次提交
7468c56 第四次提交
a1d6ef4 第三次提交
40d6a74 (origin/dev) 第二次提交
b6a242f 第一次提交

可以看到,master最新版本为第五次修改。

如果发现,在第四次修改有错误,需要回滚到第三次修改,就可以用reset命令来回退。

执行 git reset --hard a1d6ef4,这个时候,git的提交历史变为:

$ git log --oneline
a1d6ef4 (HEAD -> master) 第三次提交
40d6a74 (origin/dev) 第二次提交
b6a242f 第一次提交

可以看到master当前指向a1d6ef4这个版本,我们回到了第三次修改。

使用reset命令,Git会把要回退版本之后提交的修改都删除掉。

Lin@L-Cheng MINGW64 ~/Desktop/jack (master)
$ git log --oneline
f94b796 (HEAD -> master) 第五次提交
b765f45 第四次提交
0c401e1 第三次提交
9541002 第二次提交
4a7a07a 第一次提交

看上面代码发现第三次修改有错误,想要恢复第三次修改,却要保留第四次、第五次修改呢?

这个时候就可以用revert命令:

git revert -n 0c401e1

 然后解决冲突--》add-》 commit "恢复第三次提交"

实际上,Git把第三次修改从提交中剔除(还原)了,还保留了第四次、第五次修改,并且产生了新的commit_id。 

在实际生产环境中,代码是基于master分支发布到线上的,会有多人进行提交。可能会碰到自己或团队其他成员开发的某个功能在上线之后有Bug,需要及时做代码回滚的操作。

在确认要回滚的版本之后,如果别人没有最新提交,那么就可以直接用reset命令进行版本回退,否则,就可以考虑使用revert命令进行还原修改,不能影响到别人的提交。

使用reset还是revert,需要考虑实际的适用场景,没有绝对化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值