当前位置:首页 > 开发工具 > git revert 撤销合并(commit)

git revert 撤销合并(commit)

2022年09月16日 11:21:38开发工具4

问题描述

有三个分支:master、develop、debug
develop分支合并了修复bug的debug分支的内容,develop上又因为开发等原因产生了几个新的commit,然后将develop分支合并到master进行上线,上线后发现develop合并debug的时候因为失误产生了一个紧急的严重bug,
但是develop合并debug之后的几个commit中没问题,且涉及到的改动特别多。

分析:
我之前的做法是使用reset,将develop分支的commit回到合并debug之前的commit,然后再将合并之后的commit中的改动再手动进行一遍,再使用push --force命令用本地分支将远程分支强制覆盖。但是这样做有两个缺点,一:合并之后的commit要手动再进行一遍,太费力;二、本地分支强制覆盖服务器上的分支不友好,也很危险。

解决:
偶然从同事那里知道了有revert这个命令,但是他也不大懂这个命令,就自己去网上查了下,这个命令完全可以解决我碰到的这个问题,相见恨晚~

关键命令

git revert -n commit_id -m 1

-n是不要自动合并
-m是指使用develop上merge之前的commit

复现详细流程如下:
1、初始化

git init

vim file.txt

文件内容:
git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

git add .
git commit

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

2、
创建develop分支

git checkout -b develop master

//修改文件内容
vim file.txt

如图:
git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

git add .

git commit

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

3、创建debug分支并修改文件内容

git checkout -b debug master

//修改文件内容
vim file.txt

如图:
git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

git add .
git commit

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

4、合并debug到develop

git checkout develop
git merge debug

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记
解决冲突:

vim file.txt

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

解决之后为:

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

git log

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

5、继续在develop添加新的commit

vim develop.txt

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

git status

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

git log

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

6、将合并过debug分支的develop分支合并到master

git checkout master
git merge develop
git log

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

7、在develop分支上使用revert撤销有问题的commit

命令: git checkout develop

命令: git log

commit 6c77bb35d18556a0e04718e345af46e5dd672e4f (HEAD ->  develop, master)
Author: *** <***@***.com>
Date:   Fri Dec 7 15:13:54 2018 +0800
    新增文件
commit 7c6d01aca90ade45b3a0bbcc90bb7dffe67a577f
Merge: bca6f46 55951bf
Author: *** <***@***.com>
Date:   Fri Dec 7 15:10:57 2018 +0800
    Merge branch 'debug' into develop
commit 55951bfedbcbb8ec86ee60dcb68142e9c5e6360c (debug)
Author: *** <***@***.com>
Date:   Fri Dec 7 15:04:53 2018 +0800
    debug分支修改文件
commit bca6f46e19674e504b879008df8b703dde6f6414
Author: *** <***@***.com>
Date:   Fri Dec 7 15:00:51 2018 +0800
    develop分支修改文件
commit 0b872a420185f209389e399549c511a1a1887344
Author: *** <***@***.com>
Date:   Fri Dec 7 14:59:46 2018 +0800
    初始化

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

命令:vim file.txt

One day!
Develop branch change file content.
Debug branch change file content!

使用revert命令回到commit id 为7c6d01aca90ade45b3a0bbcc90bb7dffe67a577f的提交,如果使用reset则要回到
commit id 为55951bfedbcbb8ec86ee60dcb68142e9c5e6360c的提交。

命令:git revert 7c6d01aca90ade45b3a0bbcc90bb7dffe67a577f

$ git revert 7c6d01aca90ade45b3a0bbcc90bb7dffe67a577f
error: commit 7c6d01aca90ade45b3a0bbcc90bb7dffe67a577f is  a merge but no -m option was given.
fatal: revert failed

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记
报错了,是因为这个commit是两个分支的合并,有两个parent的commit,git不知道要用那个分支上的parent commit,所以要指定一个,在哪个分支上进行合并操作的分支(develop)为parent 1,合并过来的分支(debug)为parent 2,这里使用1(即develop)

命令:git revert -n 7c6d01aca90ade45b3a0bbcc90bb7dffe67a577f -m 1

命令:git status
git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

命令:vim file.txt

One day!
Develop branch change file content.

变为了develop合并debug之前的状态

git commit
git status

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

git log

git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

分支合并之后的commit中新增的文件develop.txt还是存在的,修改的只是将debug合并到develop内容的撤销,撤销到合并前的develop的commit
命令:ls
git revert 撤销合并(commit) _ JavaClub全栈架构师技术笔记

将revert之后的develop合并到master分支

命令:git checkout master
命令:vim file.txt

One day!
Develop branch change file content.
Debug branch change file content!

命令:git merge develop
命令:vim file.txt

One day!
Develop branch change file content.

现在已经把在develop分支上合并debug的commit有问题的部分解决了,而且可以直接推送到代码服务器。

本文地址:https://blog.csdn.net/leedaning/article/details/84882212
Author:leedaning

作者:leedaning
来源链接:https://blog.csdn.net/leedaning/article/details/84882212

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/tool/41797.html

标签: Git合并
分享给朋友:

“git revert 撤销合并(commit)” 的相关文章

Git常用的基本命令

目录 1.克隆 2.新建分支 3.提交 4.提交到远程仓库 5.下拉 6. 7.切换分支 8.暂存...

远程仓库都不知道,那你学Git干嘛?

远程仓库都不知道,那你学Git干嘛?

目录 远程仓库 1.添加远程库 2.SSH警告 3.从远程库...

Git config 使用说明

Git config 使用说明

Git config 使用说明 卖一下广告,欢迎大家关注我的微信公众号,扫一扫下方二维码或搜索微信号 stormjun,即可关注。 目前专注于 Android 开发,主要分享 Android开发相关知识和一些相关的优秀文章,包括个人总结,职场经验等...

git clone失败或连接超时解决方案

git clone失败或连接超时解决方案

git clone失败或连接超时解决方案 当我们在git上克隆代码时,可能会报错或者连接超时:如下图 1) 可以把仓库地址前缀https换成 git: git clone https://github.com/cod...

Git取消合并

git merge --abort 作者:hanchao5272 来源链接:https://blog.csdn.net/hanchao5272/article/details/82154327...

GIt在pyCharm的使用教程

GIt在pyCharm的使用教程

GIt在pyCharm的使用教程 目录 GIt在pyCharm的使用教程 (一)Git的安装和配置 (二)在pycharm中配置git (三)创建仓库 (四)一些基础操作 (五)建立远程仓库提交代码   ...

Git是什么?可以用来做什么?如何使用?

Git是什么?可以用来做什么?如何使用?

看完本文之后你能收获什么? 1.知道git是什么,可以用来干什么。 2.会使用git进行版本控制。 3.知道如何继续深度学习git。 git用来干什么? 不知道你工作的时候有没有遇到这样的情况:...

图解git及vscode中的git/gitlens插件的使用

图解git及vscode中的git/gitlens插件的使用

vscode中git的简单使用 前言 一、git 1.git是什么 2.git可以做什么 二、工作流程 三、操作步骤...

git add -A 和 git add . 的区别

git add -A 和 git add . 的区别

git add -A和 git add . git add -u在功能上看似很相近,但还是存在一点差别 git add . :会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。