git revert以及revert的恢复

这篇具有很好参考价值的文章主要介绍了git revert以及revert的恢复。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:背景与方案

在工作中遇见的这样的场景:

场景一:

已经merge到待发布的版本分支中的功能需要移除当前的分支,改在后续版本发布,示意图如下,展示的是commit序列,
git revert后怎么恢复,git 工具,运维,其他,git,github
这里想要移除的功能是commit_2的,所以需要在不改动其他commit相对顺序前提下,将这个‘瘤’取下,因此这里就绝对不推荐git reset的方式,因为如果commit_2在末尾可以,如果不在末尾,将导致commit_2后的提交都被清空,这里要使用git revert的方式,像链表从中间删除元素一样,保持其他提交的顺序。

git checkout -b revert_commit origin/master   #从远程分支上创建本地的revert分支
git revert commit_2    #注意这里commit_2是指定的提交id,注意这步可能会冲突,因为有可能其他人在你这个提交基础上做了工作,要解决冲突
git add .  #这一步用来解决冲突后添加文件到暂存区,没有冲突不需要
git commit -m 'revert commmit_2'     #设置revert的提交信息
git push origin revert_commit:revert_commit     #上传本地的revert分支
git merge revert_commmit master     #分支合并

场景二:

上一个版本已经定了,如下的commit顺序,这里commit_2是虚线表示记录还在,但是代码不在,可以理解为commit_2是一个加法,revert1是针对commit_2的一个减法。

git revert后怎么恢复,git 工具,运维,其他,git,github
问题来了,当前master分支上是如上图所示的提交日志,现在新版本又需要这个commit_2的代码了,这里注意有一个坑的方法,我们也先说坑。
很多人觉得无所谓,我本地更新最新的master分支代码,恰好我之前写的commit_2本地还有分支,我直接rebase一下不就可以了吗?而且应该会生成一个新的commit_5紧接在revert1后面。
问题来了,rebase就是这个坑,使用rebase变基,相当于把你本地的这个分支(注意和远程上的现在侧commit_2合并的分支一个名字)再次merge一遍,但是你要注意,最新的commit是revert1,是摘除这个分支的merge请求,会导致你无论rebase多少次,这个commit_2的代码都不会出现,被revert1抵消掉了,而且会使得你本地的这个分支也被rebase掉,还需要git reflog&git reset --hard HEAD@{i}恢复。
解决方法:

方法1:负负得正(推荐)

既然revert剔除了我的commit_2提交,那我再revert这次revert,负负得正不就行了?确实有效。
这里注意要找对那个revert的commit_id

git revert revert1   #注意,还是有可能冲突的,有冲突要解决然后add就不重复了

执行成功后最终本地的commit日志如下,这里commit2的代码也恢复了,随后在push,merge到remote即可
git revert后怎么恢复,git 工具,运维,其他,git,github

方法2:新建分支重新提交(不推荐)

这个方法我其实不想写,但是也是写到rebase坑的时候想到的,新建一个不同名的分支,在commit_2代码量不大的情况下,重新拷贝到新分支上,然后重新提交,merge,这样绕过了revert1的限制,本质上这个方法就是重写。

二:工作中的实际操作(针对场景2)

以下数据已经经过脱敏处理。

git log    #找到revert处
commit f71b258de85679d5cdad395f6d8ac675f9817a1a
Author: leel 
Date:   Wed Nov 9 17:39:13 2022 +0800

    add version 1.0.0

commit 395b7f8fd8b29eefd25e41358f23a71f7ab93184   <------------------这里是上次revert的id
Author: liming 
Date:   Wed Nov 9 17:27:34 2022 +0800

    Revert "update rules"

    This reverts commit 215d734c866ed8adb88e8c33ed6fe624d349a9a8.

commit 23734eb14c7feb19716b6a9aa9fb7aa4c9d4b5f4
Merge: b866e32 246894a
Author: xiaohong 
Date:   Tue Nov 8 11:14:24 2022 +0800

    extended api verification common

commit 246894a619ad61c58dce1a8140196eaabc7e82ca
Author: xiaohong 
Date:   Tue Nov 1 17:43:37 2022 +0800

    extended api verification common
$ git revert 395b7f8fd8b29eefd25e41358f23a71f7ab93184
[cancel_revert_update_rules 4a2b079] Revert "Revert "update rules""
 5 files changed, 78 insertions(+), 57 deletions(-)

发现没冲突,而且git log已更新

$ git log
commit 4a2b0796190aa950ab8b9b75367ff80fbb3cd43d
Author: leel
Date:   Thu Dec 22 12:22:30 2022 +0800

    Revert "Revert "update rules""    <--------------------------更新了revert revert 即负负得正

    This reverts commit 395b7f8fd8b29eefd25e41358f23a71f7ab93184.

commit b6abc418f808cfcddee25e163299195b9ebde440
Merge: b2dee9d bf1b916
Author: xiaohong
Date:   Wed Dec 21 10:26:54 2022 +0800

    remove side

然后就是常规的git commit -m&git push 略文章来源地址https://www.toymoban.com/news/detail-779542.html

到了这里,关于git revert以及revert的恢复的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如果不小心git reset --hard了怎么恢复代码?

    1 前言 本来是想把commit的存在缓存区的代码删除,再重新commit一遍的,用了 git reset --hard HEAD^ 这个命令后,没想到本地代码退回到初始版本了,修改过的全部不见了。(悔不当初!) 2 解决办法 前提: git上传代码到仓库add、commit、push,代码必须是commit过的才有效,只有add不

    2024年02月11日
    浏览(40)
  • Git reset、revert用法

    reset是删除之前的提交记录,所有的提交点都会被清除,我们看下执行前后的git log区别 执行完成后发现个人分支第三个提交好像从来没有出现过一样,建议不要使用reset,毕竟会把别人的提交点彻底删除 revert 将指定提交的代码给清除掉,提交记录还存在,相当于添加一个新

    2024年02月10日
    浏览(28)
  • git revert命令用法详解

            Git revert 命令用于撤销最近的提交,其中提交的内容是已经提交的,但是发现了一些错误或者需要回滚到之前的版本。并且返回代码到提交之前的状态。 下面是 Git revert 命令的一些用法: 1、撤销单个提交         其中 commit-hash 是要撤销的提交的唯一标识符。执

    2024年02月11日
    浏览(44)
  • 【git】git revert 撤销已入库的提交

    回滚没有入库的提交,使用git reset 很方便,但是对于入库的提交,想撤回的话,需要使用git revert 回退库中最近一次推送的提交: git revert HEAD 回退指定的某次提交: git revert xxxx git revert 命令还有两个参数。 –no-edit:执行时不打开默认编辑器,直接使用 Git 自动生成的提交信

    2024年02月12日
    浏览(28)
  • git reset 命令详解 git revert命令详解。

    git reset 命令格式为: git reset [ --soft | --mixed | --hard ] [ commitid ] 在git的这些命令中git reset是最长常用的,也是最危险的最容易被误用的。它的主要参数是:soft,mixed,hard它们告诉git,当执行reset是,要对index和working copy做什么。 soft: –soft参数只将其它的commit重置到你选定的HEAD,

    2024年02月15日
    浏览(44)
  • 直播预告 | 开源运维工具使用现状以及可持续产品的思考

    运维平台自上世纪90年代开始进入中国市场,曾形成以传统四大外企:IBM、BMC、CA、HP为代表的头部厂商,还有一众从网管起家的国内厂商。2010年前后,出现了以Zabbix、Nagios、Cacti为代表的开源工具,后来又陆续出现了Prometheus、Skywalking等开源产品。 在特殊历史条件下,百家争

    2024年02月12日
    浏览(29)
  • git的 reset 和 revert 区别

    线上master分支不可信,需要回到某个分支; 但是很多人习惯把一个需求,分多次commit,于是会出现下面这种情况 基于这种情况,git revert 就不如 git reset好用,可以借助Idea,直接通过 git reset --hard 指向需要回退到的commit,然后随便找个地方,敲上一个空格,产生一次新的commi

    2024年03月21日
    浏览(35)
  • git版本回退(git reset、git revert、git stash)

    本文 git 相关命令: git reset: 回退版本,可指定某一次提交的版本。 git reset [--soft | --mixed | --hard] commitId 。 git revert: 撤销某个提交,做反向操作,生成新的commitId,原有提交记录保留。 git revert commitId 。 git commit --amend: git commit –amend 既可以对上次提交的内容进行修改,也

    2024年02月08日
    浏览(42)
  • git 的rebase、reset、revert区别?

    rebase 、 reset 、和 revert 是 Git 中用于修改提交历史的三个不同的命令,它们的作用和效果有所不同。 1. rebase : git rebase 用于将一个分支的提交移到另一个分支上,并重新应用这些提交。主要有两种用途: 整理提交历史 :将多个小的提交合并成一个更为清晰的提交历史,避免

    2024年01月21日
    浏览(50)
  • Git命令集合4——用户界面仓库、命令和文件接口以及开发者文件格式、协议和其他接口

    Git命令集合索引目录 1. attributes - 定义每个路径的属性 解释: 该命令用于定义每个路径的属性,允许用户为特定文件或路径设置自定义属性,如文件编码、行尾格式等。 使用方式: 通过创建名为 .gitattributes 的文件,并按照特定语法设置路径或文件的属性规则。 导致结果:

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包