git合并丢失代码问题分析与解决(错误操作导致)

git revert后导致合并代码丢失

起因

我有一个开发分支antd3.x和一个主分支develop,我在合并antd3.x到develop的时候发现有些修改没有合并进来。

查找问题

然后就去网上查,发现这篇文章《git合并丢失代码问题分析与解决》
  其中说到git merge的原理是三方合并,简单来说就是假设我有a和b两个分支,我要合并b到a,这个时候git 其实还会去找到a和b的最近的父节点c,将c作为基础的分支,然后对abc进行比较,如果有一个文件xxx.js,xxx.js的内容abc三个分支上同一行都不一样那么就会报conflict,因为git也不知道该保留谁的代码,就会让你自行决断;如果只有一个分支比如b上面的xxx.js的同一行代码和c分支上的不一样那么git就会自作主张的认为应该保留b上面的修改,看到这我就有了方向,我应该去找我此次合并的两个分支的那个最近的父节点,问题应该就出在他上面。
  通过执行 git merge-base antd3.x develop 找到了他俩base节点2344a88,然后查看该节点的代码发现那些没有合并进来的修改已经存在于这个base节点上了,怪不得进行三方合并的时候没有合并进来,因为git发现develop分支上对比base分支没有这些修改,于是这些修改就被删除掉了。但是到这一步我又有疑问了,我没有手动的删除过develop上的这些修改,为啥这些修改会没有了呢,于是我查看log发现我曾经通过 git revert 撤销过一个合并,而这个合并恰巧就是那个修改的内容,到这块问题基本就清楚了,下面我总结一下。

总结

让我们从头捋一下这个问题的前因后果:

我有三个分支develop、antd3.x和std-08,其中antd3.x是根据develop拉取的,std-08是根据antd3.x拉取的
此时我想要合并antd3.x到develop分支上,执行代码 git merge --no-ff antd3.x
发现antd3.x上面的有些修改(x)没有合并到develop上
通过 git merge-base antd3.x develop 找到了他俩base节点2344a88
发现base节点上面存在修改x
通过 git log 发现develop分支上曾经执行过 git revert
本来当时是想把std-08合并到antd3.x上结果合并到了develop上,也就是此时修改x合并到了develop分支上
然后执行了 git revert 撤销了此次合并,并正确合并std-08到antd3.x上,这就导致了antd3.x和develop的共同父节点变成了std-08的最后一次提交2344a88
所以后续再想合并antd3.x到develop上时,进行三方合并,发现base节点上的修改在develop上面被删除了,所以合并的结果就是删除这些修改,但是实际上这些修改我们是想保留的

解决方案

解决方案有两个:
  1.在develop上执行 git reset commitId 到合并std-08之前的那次提交然后 git push -f origin ,这样develop的commit历史就不包含那次合并了
  2.在develop上执行 git revert HEAD~ 把之前revert的再revert掉,这个我没有试过

思考

其实这个教训充分暴露了我对 git revert 和 git reset 的区别不甚了解,可以看下这篇文章《git revert 用法》,对它俩的区别解释的很清楚,其实就是 git revert 的撤销原理就是删除掉之前的提交然后执行commit,这样所有的commits都会保留下来,也就埋下了隐患,在我的场景里就是在git 合并的时候寻找的base节点就是develop revert之前的那个commit,如果是 git reset 就不会保留这个commit,也就不会把它作为base节点,合并的时候就不会有问题。我看了下网上还有另一种解释就是执行完 git revert 后,git就认为你不在需要这些修改,以后再合并的时候如果有这样的修改要合并,git就会忽略,我没有验证过这种说法的真实性。
转载:https://www.cnblogs.com/kwzm/p/10288684.html

git合并丢失代码问题分析与解决相关推荐

  1. git 合并部分代码

    1. 将代码提交到当前分支. 2. 切换到需要合并部分代码的分支. 3. idea右下角点击分支,选择刚刚提交代码的分支,选择 show diff with tree,如下图 4. 在页面中按住ctr ...

  2. idea开发中git合并的代码,

    方法一: 将master主分支 合并到 子分支dev上 , 1.当前如果在dev分支上,先提交dev分支的代码到本地,然后推送到服务器, 2.然后切换分支到master主分支上,先更新master主分 ...

  3. idea git 合并分支代码

    1.将 dev开发分支代码 合并到 master主分支 checkout 切换到 dev开发分支,Pull一下最新的代码. checkout 切换到 master主分支,Pull一下最新的代码. 在l ...

  4. git合并分支代码到master

    第一步:git checkout master ,再使用 git branch 查看 版本 二:合并test 到master 使用命令  Git merge test 三:git push

  5. git合并分支后,删除分支_使用git删除合并的分支

    git合并分支后,删除分支 It's common courtesy to keep your git branch list clean, especially when colleagues ne ...

  6. git合并分支导致代码丢失问题,记录勉励自己

    git代码丢失不要慌,只要你的代码经历过git add 基本都能找回来,之前代码合并时遇到代码丢失,切换回不到其他分支,一直提示"正在变基"解决方案: git 合并分支造成多余分支 ...

  7. 【消失的代码】Git 合并分支导致代码消失

    1. 问题背景 A 页面的代码莫名其妙消失了,而且不清楚是什么时候被删的. 发现这个问题之后,心里除了一句"草泥马"以外,也萌生了很多疑惑.比如说,团队在代码上线前,是有 CR 流 ...

  8. git命令合并分支代码

    对于复杂的系统,我们可能要开好几个分支来开发,那么怎样使用git合并分支呢? 合并步骤: 1.进入要合并的分支(如开发分支合并到master,则进入master目录) git checkout mas ...

  9. VS Code 1.69 发布:允许快速解决 Git 合并冲突

    Visual Studio Code 1.69 现已发布,一些主要亮点更新包括: 3-way merge editor- 在 VS Code 内解决合并冲突. 合并编辑器允许你快速解决 Git 合并冲 ...

最新文章

  1. 一口气说出 5 种 IO 模型,蒙圈了!
  2. 对象池回收对象_回收对象以提高性能
  3. cron 每天下午5点_下午5点30:沅江新沅路与琼湖路交叉路口...
  4. C++11中using 的使用
  5. 渗透测试/应急演练过程中metasploit制作木马连接失败问题排查
  6. 扬天t4900d u盘linux,联想扬天T4900d台式电脑u盘启动设置方法
  7. 使用element中el-tab如何改变文字样式等
  8. ME525+刷机2.3.6版本过程分享
  9. panic recovered, err: runtime error: invalid memory address or nil pointer dereference 怎么排查问题
  10. 删除账户后开机仍然登陆刚被删除的账户的解决方法
  11. Mac Safari 模拟 IE
  12. 教育消费分期系统介绍
  13. Redis数据库 专题
  14. 华为测试岗面试经验(附面试流程)
  15. 杰理之使用MIC隔电容方案,微信语音前几秒也出现“哒哒”【篇】
  16. J2EE基础之map集合框架
  17. 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)
  18. Xendesktop配置高可用DDC
  19. mysql建表时插入中文_Mysql新建表,插入中文时报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题...
  20. 常用的重试技术—如何优雅的重试(Spring-Retry)等

热门文章

  1. UltraISO 安装系统时,提示无法在驱动器0分区上安装windows / WINPE类软件重装系统无法正常开机 解决办法
  2. 从苏宁电器到卡巴斯基第28篇:难忘的三年硕士时光 IV
  3. Linux应用开发【第二章】图像处理应用开发
  4. java流程图中平行四边形代表什么,一文搞懂
  5. 解决提示“你可能是软件盗版的受害者”
  6. 解决Win10系统EFI引导出错,导致无法开机的问题
  7. 手游爆发“平台战”启幕
  8. (保姆级教学)ADS设计高频微波整流电路之二——版图联合仿真
  9. 弘辽科技:淘宝开店会抽取多少利润?要多少费用?
  10. Windows10系统只有一个C盘,如何扩展D盘等