Git进阶(二):git revert 用法

一、revert

1.1 revert 简介

Git revert命令用于通过创建一个新的commit来撤销一个或多个之前的commit,并且把这次撤销,作为一次最新的提交,此次操作之前和之后的commithistory都会保留,这样做的好处是保持了项目历史的完整性,并且可以将撤销的改动应用到其他分支。

git revert是提交一个新的版本,将需要revert的版本内容再反向修改回去,版本会递增,不影响之前提交的内容。

  • git revert HEAD 撤销前一次 commit
  • git revert HEAD^ 撤销前前一次 commit
  • git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
  1. 撤销单个commit:如果只想撤销一个commit,可以使用以下命令

    git revert <commit_hash>
    
    git revert 131b7a916560c549e598ca9c66c2a3d28c7508e9
    
  2. 撤销多个commit:如果想撤销多个commit,可以使用以下命令

    git revert <commit_hash1>..<commit_hash2>
    
    git revert 131b7a916560c549e598ca9c66c2a3d28c7508e9..7a5b4709656e614deab37eb19e355ba9e724eb
    
  3. 使用交互式revert:如果想在撤销多个commits时选择性地进行,可使用-i选项进入交互式模式

git revert -i

1.2 应用示例

假设本次提交commit页面有问题,需要回退

首先,查看提交记录:

# 查看最近 2 次commit记录git log -2
commit 1111fec75f226f83822f6ceda92704d39f3d443
Author: shq5785
Date:   Mon Apr 22 14:24:11 2024 +0800

    fix: 本次发布的commit代码改动"

commit 22229139486c6a59399b581df1c060b5f5846cf0
Author: shq5785
Date:   Mon Apr 22 11:18:01 2024 +0800

    feat: 历史页面
~

根据提交记录commit_hash,选择需要撤销的 commit 版本号,输入:wq并回车确定。

git revert 1111fec75f226f83822f6ceda92704d39f3d443
Revert "fix: 本次发布的commit代码改动""

This reverts commit 1111fec75f226f83822f6ceda92704d39f3d443.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch lsmas
# Your branch is up to date with 'origin/test'.
#
# Changes to be committed:
#       modified:   src/pages/ListDetailPage/index.tsx
#
~                                                                                                                                                                                                                                                
~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
~                                                                                                                                                                                                                                                
~                                                                                                                                                                                                                                                
~                                                                                                                                                                                                                                                
~                                                                                                                                                                                                                                                
:wq

revert 成功后的提示信息如下:

git revert aa69cfec75f226f83822f6ceda92704d39f3d443
[lsmas 74239f9] Revert "fix: 本次发布的commit代码改动""
 1 file changed, 26 insertions(+), 5 deletions(-)

再次查看commit记录就会发现,多了一条回退的记录。

git log -3
commit 33339f9dcc7f4c094ae3dd07243048772338bdc3
Author: shq5785
Date:   Mon Apr 22 14:52:31 2024 +0800

    Revert "fix: 本次发布的commit代码改动"
    
    This reverts commit 1111fec75f226f83822f6ceda92704d39f3d443.

commit 1111fec75f226f83822f6ceda92704d39f3d443
Author: shq5785
Date:   Mon Apr 22 14:24:11 2024 +0800

    fix: 本次发布的commit代码改动"

commit 22229139486c6a59399b581df1c060b5f5846cf0
Author: shq5785
Date:   Mon Apr 22 11:18:01 2024 +0800

    feat: 历史页面

⚠️:切记,结束后需再重新 push 发布,用回退后的版本代码覆盖有问题的代码。

1.3 …is a merge but no -m option was given.问题修复

在执行以下revert命令时,遇到如下错误提示

git revert ce479b597de6025da4a67ddd4a94d1b8034d8c67

error: commit ce479b597de6025da4a67ddd4a94d1b8034d8c67 is a merge but no -m option was given.
fatal: revert failed

出现以上错误的原因是由于此次撤销的是一次合并,git不知道要保存这两个分支中哪个的修改。

  • git revert -m 1 c311875a825618c76ee16a457d038831717a58a5 表示保留当前分支的更改

  • git revert -m 2 c311875a825618c76ee16a457d038831717a58a5 表示保留master更改

如果是为了保留当前分支的代码,即使用 -m 1

二、git revert 和 git reset 的区别

  • git revert是用一次新的commit回滚之前的commitgit reset是直接删除指定的commit

  • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。

  • git reset 是把HEAD向后移动了一下,而git revertHEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

三、拓展阅读

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

No Silver Bullet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值