Git如何撤销merge操作。当 merge 以后还有别的操作和改动时,用 git revert:该命令就是为撤销某次提交而存在的;

首先,我是明白100047dcc这次提交是有问题的,这是问题的源头;
也就是说,只要我们把这次提交的给撤销了,就不会有问题了!

步骤 一 查看merge commit的详细信息

结果报错了,报了一个Commit is a merge but no -m option was given.
为什么呢?如果100047dcc这只是一个普通的提交,其实是不会报错的!
但是,这是一个merge的提交。那么在撤销时,git并不知道我要撤销具体哪次!
查看这次commit的详细信息。

git show 100047dcc

如下图:

从图中可以看到,每当你使用 git merge 时,是合并两个分支得到一个新的 merge commit。而Merge 这一行代表的是这个合并 parents,它可以用来表明 merge 操作的线索。
这个时候,怎么办呢?

步骤二 revert

我执行了这样的一个操作:

git revert 100047dcc -m 1

参数 -m 就是选择一个主线从左往右,从1开始数。在这个例子中,我要保留的是be8c6ff999,撤销的是ca4a7ff999。因此-m 后跟参数1。
接着其把代码冲突,然后我解决冲突,保留主分支的代码,去掉需要revert的代码。解决完冲突后,我执行如下操作:

$ git commit -m "ceshi"
$ git

步骤三 revert 之后重新上线

假设狗蛋在自己分支 goudan/a-cool-feature 上开发了一个功能,并合并到了 master 上,之后 master 上又提交了一个修改 h,这时提交历史如下:

a -> b -> c -> f -- g -> h (master)\      /d -> e   (goudan/a-cool-feature)

突然,大家发现狗蛋的分支存在严重的 bug,需要 revert 掉,于是大家把 g 这个 merge commit revert 掉了,记为 G,如下:

a -> b -> c -> f -- g -> h -> G (master)\      /d -> e   (goudan/a-cool-feature)

然后狗蛋回到自己的分支进行 bugfix,修好之后想重新合并到 master,直觉上只需要再 merge 到 master 即可(或者使用 cherry-pick),像这样:

a -> b -> c -> f -- g -> h -> G -> i (master)\      /               /d -> e -> j -> k ----    (goudan/a-cool-feature)

i 是新的 merge commit。但需要注意的是,这 不能 得到我们期望的结果。因为 d 和 e 两个提交曾经被丢弃过,如此合并到 master 的代码,并不会重新包含 d 和 e 两个提交的内容,相当于只有 goudan/a-cool-feature 上的新 commit 被合并了进来,而 goudan/a-cool-feature 分支之前的内容,依然是被 revert 掉了。

所以,如果想恢复整个 goudan/a-cool-feature 所做的修改,应该先把 G revert 掉:

a -> b -> c -> f -- g -> h -> G -> G' -> i (master)\      /                     /d -> e -> j -> k ----------    (goudan/a-cool-feature)

其中 G' 是对 G 的 revert 操作生成的 commit,把之前撤销合并时丢弃的代码恢复了回来,然后再 merge 狗蛋的分支,把解决 bug 写的新代码合并到 master 分支。

作者:woshishui1243
链接:https://www.jianshu.com/p/6d1d9871ced0
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Git如何撤销merge操作相关推荐

  1. git 回滚 merge操作

    1.只在本地 直接reset 到上一个log 就行了. git reset --hard {上个版本commit log} 2.已经推送到了远程 在本地执行1 的操作后,强制推送到远程 git res ...

  2. Git之撤销add操作

    1 问题 git add file或者git add folder错了 2 解决办法 git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了 git reset HE ...

  3. Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突...

    Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...

  4. git进阶(撤销pull、撤销merge、撤销add)

    1.撤销本次pull git reflog reset到某个版本 git reset --hard 91ae6ad 2.撤销本次merge 如果merge了其他分支代码造成了大量的冲突 想撤销本次me ...

  5. git的一些撤销/回退操作

    在个人开发和协同开发过程中,我们是通过git把我们本地仓库和远程仓库联系起来,首先 我们要知道的是git 有工作区.暂存区和Git仓库.我们本地编写的代码,不执行git命令都处于工作区. 执行 git ...

  6. Git的撤销操作 git commit --amend

    在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit --amend 撤销上一次提交 并讲暂存区文件重新提交 git checkou ...

  7. Git的撤销操作 git checkout -- <file>

    在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit   --amend        撤销上一次提交  并讲暂存区文件重新提交 g ...

  8. Git的撤销操作 git reset HEAD -- <file>

    在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit   --amend        撤销上一次提交  并讲暂存区文件重新提交 g ...

  9. Git操作之 git add 撤销、git commit 撤销

    1.git add 添加多余文件 撤销操作 git reset HEAD 后面什么都不跟的,就是上一次add 里面的内容全部撤销 git reset HEAD XXX 后面跟文件名,就是对某个文件进行 ...

最新文章

  1. raconter ce qui s'est passé
  2. Android性能优化——内存泄漏优化
  3. 编译安装mysqld php服务 安装论坛
  4. Service Worker 概念简介
  5. 利用 CocoaLumberjack 搭建自己的 Log 系统
  6. ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法
  7. vue+iview后台管理模板
  8. 使用python来构造有向随机网络
  9. matlab 中产生高斯白噪声
  10. BN层对神经网络神经元数据分布的影响
  11. 迭代器:斐波那契数列
  12. hibernate sqlserver timestamp_SQLServerException:从时间戳到TIMESTAMP的转换不受支持。
  13. 拓端tecdat|通过Python中的Apriori算法进行关联规则挖掘
  14. 后台的Activity被系统回收怎么办?
  15. python打平处理嵌套list
  16. 凸函数与优化,以及海森矩阵
  17. Pyspark 案例实践 假新闻分类
  18. 量化金融笔记2-期货量化基础
  19. 西北计算机大赛奖金有多少,我校学生2019年中国大学生计算机设计大赛西北赛区决赛中获得佳绩...
  20. 如何借助SVG+CSS用2个小时撸完一个网易云音乐的动效海报(可控制速度)

热门文章

  1. 2017年中国北京UI设计师薪资调查:平均薪资12630
  2. c语言 队列---->链表实现
  3. python123用户登录c_【视频】[2019.1.9]用python演奏键盘钢琴谱(最初版的tantan离线客户端)【弹弹123吧】_百度贴吧...
  4. 计算图像的均值与标准差
  5. netlify国内快吗
  6. MySQL——删除语句
  7. 轩辕剑五的乱码问题解决
  8. ApacheCN 翻译活动进度公告 2019.2.18
  9. VSCode CMake 安装与使用教程
  10. 基于Python实现的五子棋tkinter版小游戏 课程报告+源码