Git如何撤销merge操作
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操作相关推荐
- git 回滚 merge操作
1.只在本地 直接reset 到上一个log 就行了. git reset --hard {上个版本commit log} 2.已经推送到了远程 在本地执行1 的操作后,强制推送到远程 git res ...
- Git之撤销add操作
1 问题 git add file或者git add folder错了 2 解决办法 git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了 git reset HE ...
- Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突...
Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...
- git进阶(撤销pull、撤销merge、撤销add)
1.撤销本次pull git reflog reset到某个版本 git reset --hard 91ae6ad 2.撤销本次merge 如果merge了其他分支代码造成了大量的冲突 想撤销本次me ...
- git的一些撤销/回退操作
在个人开发和协同开发过程中,我们是通过git把我们本地仓库和远程仓库联系起来,首先 我们要知道的是git 有工作区.暂存区和Git仓库.我们本地编写的代码,不执行git命令都处于工作区. 执行 git ...
- Git的撤销操作 git commit --amend
在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit --amend 撤销上一次提交 并讲暂存区文件重新提交 git checkou ...
- Git的撤销操作 git checkout -- <file>
在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit --amend 撤销上一次提交 并讲暂存区文件重新提交 g ...
- Git的撤销操作 git reset HEAD -- <file>
在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit --amend 撤销上一次提交 并讲暂存区文件重新提交 g ...
- Git操作之 git add 撤销、git commit 撤销
1.git add 添加多余文件 撤销操作 git reset HEAD 后面什么都不跟的,就是上一次add 里面的内容全部撤销 git reset HEAD XXX 后面跟文件名,就是对某个文件进行 ...
最新文章
- raconter ce qui s'est passé
- Android性能优化——内存泄漏优化
- 编译安装mysqld php服务 安装论坛
- Service Worker 概念简介
- 利用 CocoaLumberjack 搭建自己的 Log 系统
- ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法
- vue+iview后台管理模板
- 使用python来构造有向随机网络
- matlab 中产生高斯白噪声
- BN层对神经网络神经元数据分布的影响
- 迭代器:斐波那契数列
- hibernate sqlserver timestamp_SQLServerException:从时间戳到TIMESTAMP的转换不受支持。
- 拓端tecdat|通过Python中的Apriori算法进行关联规则挖掘
- 后台的Activity被系统回收怎么办?
- python打平处理嵌套list
- 凸函数与优化,以及海森矩阵
- Pyspark 案例实践 假新闻分类
- 量化金融笔记2-期货量化基础
- 西北计算机大赛奖金有多少,我校学生2019年中国大学生计算机设计大赛西北赛区决赛中获得佳绩...
- 如何借助SVG+CSS用2个小时撸完一个网易云音乐的动效海报(可控制速度)
热门文章
- 2017年中国北京UI设计师薪资调查:平均薪资12630
- c语言 队列---->链表实现
- python123用户登录c_【视频】[2019.1.9]用python演奏键盘钢琴谱(最初版的tantan离线客户端)【弹弹123吧】_百度贴吧...
- 计算图像的均值与标准差
- netlify国内快吗
- MySQL——删除语句
- 轩辕剑五的乱码问题解决
- ApacheCN 翻译活动进度公告 2019.2.18
- VSCode CMake 安装与使用教程
- 基于Python实现的五子棋tkinter版小游戏 课程报告+源码