git revert 撤销合并(commit) - Go语言中文社区

git revert 撤销合并(commit)


问题描述

有三个分支: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 add .
git commit

提交

2、
创建develop分支

git checkout -b develop master

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

如图:
修改文件内容

git add .

git commit

提交

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

git checkout -b debug master

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

如图:
修改文件内容

git add .
git commit

提交

4、合并debug到develop

git checkout develop
git merge debug

合并debug到develop
解决冲突:

vim file.txt

冲突内容

解决之后为:

解决冲突之后

git log

合并之后的log

5、继续在develop添加新的commit

vim develop.txt

修改文件

git status

状态

git log

合并之后的commit

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

git checkout master
git merge develop
git log

如图

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
    初始化

在这里插入图片描述

命令: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

在这里插入图片描述
报错了,是因为这个commit是两个分支的合并,有两个parent的commit,git不知道要用那个分支上的parent commit,所以要指定一个,在哪个分支上进行合并操作的分支(develop)为parent 1,合并过来的分支(debug)为parent 2,这里使用1(即develop)

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

命令:git status
在这里插入图片描述

命令:vim file.txt

One day!
Develop branch change file content.

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

git commit
git status

在这里插入图片描述

git log

在这里插入图片描述

分支合并之后的commit中新增的文件develop.txt还是存在的,修改的只是将debug合并到develop内容的撤销,撤销到合并前的develop的commit
命令:ls
在这里插入图片描述

将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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/leedaning/article/details/84882212
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 18:13:34
  • 阅读 ( 1157 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢