git revert和git reset的差异点和区别

git revert

定义

撤销某次提交,此次撤销操作和之前的commit记录都会保留。

git revert会根据commitid找到此次提交的变更内容,并撤销这些变更并作为一次新commit提交。
ps:此次commit和正常commit相同,也可以被revert
在这里插入图片描述
revertreset有本质的差别,revert撤销,即对某次commit的变更内容进行还原,如下图:
在这里插入图片描述

commit 1: 新增index.js
commit 2: 删除index.js (操作revert commit1
commit 3: 新增index.js (操作revert commit2

用法

撤销某次提交

 git revert HEAD          撤销前一次 commit
 git revert HEAD^         撤销前前一次 commit    
 git revert commit_id   (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)

撤销多次连续提交(区间)

git revert -n commit_id_start..commit_id_end

撤销多次不连续提交

git revert -n commit_id_1
git revert -n commit_id_3
特殊用法-撤销合并

git revert撤销变化,所以在非合并提交中,git是明确知道改变和改变之前的内容,但是合并不同,合并是两个分支的代码合并成一个节点,所以git不知道之前的内容是用那个分支的,所以这种情况下需要调用命令的时候指定。
第一步:
git log找到合并的提交
在这里插入图片描述

第二步:找提交的commit id以及合并的两个分支中,基于那个分支进行撤销(即撤销后显示的内容),并确定分支序号(1,2)
第三步:

 git revert 83e2776 -m 1

ps: git revert是向前操作,所以该分支相当于已经合并到的master,撤销后再次合并,撤销的变化不会再合并一次,所以当要使用这部分变化的时候,需要手动撤销这次的撤销操作才可以。

git reset

定义

回退版本,可以指定退回某一次提交的版本

resetrevert有本质的差别,reset重置,即直接回退到某次commit,并将变更放入暂存区(不一定,参数可控制),如下图:
在这里插入图片描述
在这里插入图片描述

用法
git reset [--soft | --mixed | --hard] [HEAD]

--mixed:默认选项,重置到某个节点,并保留此节点到当前节点的改变到工作区,即未git add状态,所以需要重新git addgit commit
--soft:默认选项,重置到某个节点,并保留此节点到当前节点的改变到暂存区,即已git add状态,所以可以直接git commit
--hard:当前工作区、暂存区以及此节点到当前阶段的改变都不会保留,直接替换为重置节点的工作区。


实例

 git reset HEAD^            # 回退所有内容到上一个版本  
 git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  
 git  reset  052e           # 回退到指定版本

ps: git reset之后推送需要对应分支不处于保护状态,否则无法提交。

差异点

git revert撤销某次提交,并就撤销产生的变化生成一次commit,所以指针head会“前进”一个节点,并且这个过程中改变撤销的内容,如果撤销节点和当前节点之间有其余的提交内容,不会产生任何影响。因为向前,所以撤销合并会导致合并的内容下次合并会当成已经合并过,需要手动处理。
git reset重置到某次提交,通过参数判断是否保留当前提交和重置节点之间的内容,并且保留的情况下,会合并这些(几次commit)更改。因为是节点直接重置,所以重置合并合普通节点是一样的,下次合并正常操作即可。

使用场景

git revert:适合着撤销某一次的代码,并保留中间提交的代码。
git reset: 适合重置当前节点到某个节点这一区间提交的所有代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值