场景

master分支外,小明独立开发一个功能f1分支。f1中代码量较大且仍在更改,小明希望只将一部分文件合并到master。其他代码在以后分批次合并。在合并和开发过程中,masterf1都会不断修改。
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从而导致的无法进行下一阶段合并。

执行细节

  1. master版本为v_m1,f1版本为v_f1
  2. 将f1合并到master,master版本变更为v_m2;
  3. 切换到master,通过reset --soft将master回退到v_m1,但是保留改动,可以看到file1~file10的十个文件改动。通过git checkout清除掉其他9个文件的改动,保存file1的改动,成为v_m2’。这个v_m2’ (这个操作实际上就是把别的分支的文件直接覆盖到本分支。但是我用的是sourceTree,sourceTree中这个操作可以很方便地操作多个文件)
  4. master和f1各自更改推进到v_m3和v_f3。
  5. 在f1分支将master合并过来,称为v_f4。如果file1都被改过,会引发冲突;如果有一方没有改过,git会自动比较+合并,不会冲突;
  6. 切换到master分支,将f1分支合并过来,重复步骤3。可以看到没有冲突,同时file2~file10的改动仍然显示了出来。满足需求。

【草稿,待完善】

git只合并merge部分代码的方法相关推荐

  1. git只合并某一个分支的某个commit

    第一种情况:只合并一个commit git checkout develop-hbb git cherry-pick 7c32be61 以上,7c32be61是develop上的一个fix bug的c ...

  2. git 代码没了,git rebase 合并提交记录,git stash

    xx 问题 git合并提交记录 创建提交记录 合并提交记录 rebase有冲突 合并后的本地路径提交到远程 其中的参数 pick 改变提交 5.txt 和 4.txt 的顺序 删除某一个提交 rewo ...

  3. git分支合并指定代码_git的几种实用操作(合并代码与暂存复原代码)

    总述 git工具也用了很久,自己也写了几篇使用教程,今天继续给大家分享一些我工作中使用过的git操作. 1.git合并远程仓库的代码 2.git stash保存当前的修改 这两种情况大家应该都使用比较 ...

  4. Git 分支合并代码

    Git 分为哪几个区: https://blog.csdn.net/qq_36672905/article/details/82776283 Git的区域分为 工作区.暂存区.本地仓库区 工作区(wo ...

  5. git提交本地项目gitlab合并分支提交代码合并分支时的冲突解决git拉取新项目

    总结:选中右键 git add commit pull 运行 push 一.把dev(主分支)合并到本地自己的分支 1.选中要提交的对象(可以是整个项目,也可以是单模块提交) 2.右键-Git-Add ...

  6. GIT开发学习——合并分支的几种方法

    文章目录 一.使用merge命令合并分支 1.目标:将dev分支合并到master分支 1.1.首先切换到master分支上 1.2.如果是多人开发的话 需要把远程master上的代码pull下来 1 ...

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

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

  8. git 与团队协同开发,避免冲掉别人代码的方法

    在团队开发中,git的使用已经很常见了,博主也是经常使用coding,github等代码托管平台.在多人协同开发中,我们经常会遇到这样的问题:A在本地开发完成后,将代码推送到远程,这时候B的本地代码的 ...

  9. git 如何把master分支代码合并到自己的分支

    git 如何把master分支代码合并到自己的分支 master分支的代码领先自己的分支,git 如何把master分支代码合并到自己的分支 1.首先切换到主分支 git checkout maste ...

最新文章

  1. UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计
  2. ACID、数据库隔离级别
  3. 使用 rsync / scp 命令下载linux文件,显示网速和进度
  4. ibatis(2)ibatis是什么
  5. 操作系统学习笔记-04-操作系统的运行机制和体系结构
  6. pca算法介绍及java实现_PCA算法原理及实现
  7. c3等待加载样式 vue_Vue.js__简易加载等待动画
  8. 使用 jQuery Mobile 与 HTML5 开发 Web App (三) —— jQuery Mobile 按钮
  9. GL-关于intercopany 和intracompany 的个人理解
  10. Greenplum 类型一致性使用规范 - 索引条件、JOIN的类型一致性限制
  11. SkyEye携手Simulink实现全数字协同仿真
  12. 读《学习JavaScript数据结构与算法》 第二章
  13. promise入门的准备工作-(尚硅谷教程笔记)
  14. 信息系统运行管理员有必要考吗?现在备考还来得及吗?
  15. Mac配置双网卡使内外网同时访问
  16. Java设计模式实战 ~ 观察者模式分析与实战
  17. 新型肺炎疫情蔓延下的游戏行业会更火爆吗?
  18. was not declared in this scop
  19. 在重新格式化时不要删除自定义换行符(Don‘t remove custom line breaks on reformat)
  20. Delphi 写入txt文件

热门文章

  1. 我的2018年终总结!
  2. Cocos开发者焦点小组(第一期)招募开始啦!!
  3. python怎么判断中文_python 判断是否为中文
  4. 无界面的Chrome浏览器
  5. HTTP 长连接 与 短连接
  6. Github 的搭建和配置github中的SSH key值,android学习视频
  7. 云计算,大数据,人工智能相辅相成
  8. 视频处理工具安利,要制作视频的快来
  9. arcmap点图层获取tif图像素值,ArcMap中输出tif图片时的Write GeoTIFF Tags选项,Engine中如何实现?...
  10. 房源管理系统服务器,房源管理系统服务器