问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Git Revert实战:功能提交的撤销与恢复

创作时间:
作者:
@小白创作中心

Git Revert实战:功能提交的撤销与恢复

引用
CSDN
1.
https://blog.csdn.net/qq_21583139/article/details/128437785

在软件开发过程中,我们经常会遇到需要撤销某个提交(commit)或者恢复被撤销的代码的情况。本文将通过两个实际场景,详细介绍如何使用git revert命令来安全地处理这些需求。

一:背景与方案

场景一:从已发布的版本分支中移除某个功能

假设我们有以下的提交序列:

现在需要将commit_2的功能移除,但又不能影响其他提交的顺序。在这种情况下,使用git reset是不合适的,因为它会清除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_2的功能。很多人可能会尝试使用rebase,但这种方法是错误的,因为它会再次应用revert1,导致commit_2的代码无法恢复。

正确的做法有两种:

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

通过再次revert掉之前的revert操作来恢复代码:

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

执行成功后,本地的提交日志如下:

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

这种方法本质上是重写代码,适用于commit_2代码量不大时。

二:工作中的实际操作(针对场景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

执行revert操作:

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

检查提交日志:

$ 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

最后,按照常规流程提交并推送更改即可。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号