git只合并merge部分代码的方法
场景
在master
分支外,小明独立开发一个功能f1
分支。f1
中代码量较大且仍在更改,小明希望只将一部分文件合并到master
。其他代码在以后分批次合并。在合并和开发过程中,master
和f1
都会不断修改。
git只支持“全部合并”。
现在小明有file1~file10十个文件需要合并。第一批小明只希望合并file1.
不理想的解法
想法1:发起合并,但只将file1的改动提交到merge commit,清楚其他9个文件的更改。
存在问题:合并之后,master
的文件版本会领先与f1
。git会认为master
先将f1的其他9个文件改动合并过来,然后“清除了这些改动”。这样一来,f1再次修改file2并合并时,会引发冲突,因为master和f1都改过这个文件了。
还有一个问题是,如果f1中剩下的文件没有再改变,第二次尝试f1向master 进行merge
不会有任何改动:因为git认为这些文件都已经合并过了。
所以就有了两难困境:改动f1的文件就会conflict,不改动f1文件就没反应。潜在的危险是:如果文件很多小明一忙,忘记file10在f1
中改动过怎么办?相当于无缘无故丢失了代码;
想法2:创建另一个库res2. 在res1发起合并之后不提交,针对git给出的file change,将f1
中的文件file1直接复制到res2. 这样不会有冲突,但是非常繁琐而且粗暴,也同样存在遗漏文件更改的问题。
想法3:一些博客提到用checkout、rebase等命令合并指定单个文件。但无法应用到多个文件上。
解法
我们要求有2点:1. 利用git的检查机制(而不是人手动复制)保证改动不丢失;2. 减少conflict。
思路:通过merge操作比较不同,通过reset --soft 操作避免master版本领先于f1
从而导致的无法进行下一阶段合并。
执行细节
- master版本为v_m1,f1版本为v_f1
- 将f1合并到master,master版本变更为v_m2;
- 切换到master,通过
reset --soft
将master回退到v_m1,但是保留改动,可以看到file1~file10的十个文件改动。通过git checkout
清除掉其他9个文件的改动,保存file1的改动,成为v_m2’。这个v_m2’ (这个操作实际上就是把别的分支的文件直接覆盖到本分支。但是我用的是sourceTree,sourceTree中这个操作可以很方便地操作多个文件) - master和f1各自更改推进到v_m3和v_f3。
- 在f1分支将master合并过来,称为v_f4。如果file1都被改过,会引发冲突;如果有一方没有改过,git会自动比较+合并,不会冲突;
- 切换到master分支,将f1分支合并过来,重复步骤3。可以看到没有冲突,同时file2~file10的改动仍然显示了出来。满足需求。
【草稿,待完善】
git只合并merge部分代码的方法相关推荐
- git只合并某一个分支的某个commit
第一种情况:只合并一个commit git checkout develop-hbb git cherry-pick 7c32be61 以上,7c32be61是develop上的一个fix bug的c ...
- git 代码没了,git rebase 合并提交记录,git stash
xx 问题 git合并提交记录 创建提交记录 合并提交记录 rebase有冲突 合并后的本地路径提交到远程 其中的参数 pick 改变提交 5.txt 和 4.txt 的顺序 删除某一个提交 rewo ...
- git分支合并指定代码_git的几种实用操作(合并代码与暂存复原代码)
总述 git工具也用了很久,自己也写了几篇使用教程,今天继续给大家分享一些我工作中使用过的git操作. 1.git合并远程仓库的代码 2.git stash保存当前的修改 这两种情况大家应该都使用比较 ...
- Git 分支合并代码
Git 分为哪几个区: https://blog.csdn.net/qq_36672905/article/details/82776283 Git的区域分为 工作区.暂存区.本地仓库区 工作区(wo ...
- git提交本地项目gitlab合并分支提交代码合并分支时的冲突解决git拉取新项目
总结:选中右键 git add commit pull 运行 push 一.把dev(主分支)合并到本地自己的分支 1.选中要提交的对象(可以是整个项目,也可以是单模块提交) 2.右键-Git-Add ...
- GIT开发学习——合并分支的几种方法
文章目录 一.使用merge命令合并分支 1.目标:将dev分支合并到master分支 1.1.首先切换到master分支上 1.2.如果是多人开发的话 需要把远程master上的代码pull下来 1 ...
- 【消失的代码】Git 合并分支导致代码消失
1. 问题背景 A 页面的代码莫名其妙消失了,而且不清楚是什么时候被删的. 发现这个问题之后,心里除了一句"草泥马"以外,也萌生了很多疑惑.比如说,团队在代码上线前,是有 CR 流 ...
- git 与团队协同开发,避免冲掉别人代码的方法
在团队开发中,git的使用已经很常见了,博主也是经常使用coding,github等代码托管平台.在多人协同开发中,我们经常会遇到这样的问题:A在本地开发完成后,将代码推送到远程,这时候B的本地代码的 ...
- git 如何把master分支代码合并到自己的分支
git 如何把master分支代码合并到自己的分支 master分支的代码领先自己的分支,git 如何把master分支代码合并到自己的分支 1.首先切换到主分支 git checkout maste ...
最新文章
- UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计
- ACID、数据库隔离级别
- 使用 rsync / scp 命令下载linux文件,显示网速和进度
- ibatis(2)ibatis是什么
- 操作系统学习笔记-04-操作系统的运行机制和体系结构
- pca算法介绍及java实现_PCA算法原理及实现
- c3等待加载样式 vue_Vue.js__简易加载等待动画
- 使用 jQuery Mobile 与 HTML5 开发 Web App (三) —— jQuery Mobile 按钮
- GL-关于intercopany 和intracompany 的个人理解
- Greenplum 类型一致性使用规范 - 索引条件、JOIN的类型一致性限制
- SkyEye携手Simulink实现全数字协同仿真
- 读《学习JavaScript数据结构与算法》 第二章
- promise入门的准备工作-(尚硅谷教程笔记)
- 信息系统运行管理员有必要考吗?现在备考还来得及吗?
- Mac配置双网卡使内外网同时访问
- Java设计模式实战 ~ 观察者模式分析与实战
- 新型肺炎疫情蔓延下的游戏行业会更火爆吗?
- was not declared in this scop
- 在重新格式化时不要删除自定义换行符(Don‘t remove custom line breaks on reformat)
- Delphi 写入txt文件
热门文章
- 我的2018年终总结!
- Cocos开发者焦点小组(第一期)招募开始啦!!
- python怎么判断中文_python 判断是否为中文
- 无界面的Chrome浏览器
- HTTP 长连接 与 短连接
- Github 的搭建和配置github中的SSH key值,android学习视频
- 云计算,大数据,人工智能相辅相成
- 视频处理工具安利,要制作视频的快来
- arcmap点图层获取tif图像素值,ArcMap中输出tif图片时的Write GeoTIFF Tags选项,Engine中如何实现?...
- 房源管理系统服务器,房源管理系统服务器