Git从其他分支merge个别文件/文件夹【一个值5万的小技巧】

2024-04-02 15:58

本文主要是介绍Git从其他分支merge个别文件/文件夹【一个值5万的小技巧】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小明发现在实际项目开发过程中,总会遇到各种各样的情况,比如一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,分别开发。

项目背景

产品经理:我们本次开发三个功能,列表页功能、详情页功能、系统消息功能,分两次上线,先上列表功能,再上详情页和系统消息。

小明:好的吧(白眼)。

紧接着,小明就将本次需求分为2个分支,分别为A、B。

  • A:开发列表页功能
  • B:开发详情页功能、系统消息功能

原计划:产品经理说先上列表功能,那小明就先开发A分支,列表功能很快开发完成(厉害吧)。

计划有变:风云变幻,第二天小明按照计划开发B分支,开发到一半,产品经理突然说目前的系统消息功能(位于B分支)比较紧急,需要和列表功能(位于A分支)一起上线,当时小明就懵逼了。赶紧暂停开发详情页(位于B分支,虽然已经开发了一部分),转战系统消息功能的开发。当系统消息功能开发完成之后,就需要考虑将系统消息功能(位于B分支)和列表功能(位于A分支)放在一个分支上提测(开发一部分的详情页功能暂先不需要合并)的问题,这时候分支合并就要派上用场了。

分支合并

说起分支合并,大家第一个想到的命令肯定是git merge ,因为这是分支合并的常用命令。

使用git merge 合并分支会将两个分支的所有内容进行比较合并,因此我们如果想合并两个分支中的一部分,显然直接使用这个命令是行不通的。

So what happens next ? 嘿嘿,有两种方案可供我们选择:

强制合并

从其他分支merge指定文件到当前分支,git checkout是个合适的工具。

语法如下:

git checkout source_branch <path>...//文件路径

我们使用git checkoutB分支上的系统消息功能添加到A分支上

$ git branch* A  B$ git checkout B message.html message.css message.js other.js$ git statusOn branch A
Changes to be committed: (use "git reset HEAD <file>..." to unstage)
new file: message.css 
new file: message.html
new file: message.js 
modified: other.js

合并完成

但是……

注意:在使用git checkout某文件到当前分支时,会将当前分支的对应文件强行覆盖

因此,合并A分支上没有存在的文件没问题,但是如果合并A分支上原先就存在的文件(比如两个分支上都对other.js进行过修改),位于分支A上的文件other.js就会被checkout(分支B)过来的other.js覆盖,导致分支A上之前开发的列表功能付之东流,这样做肯定是优雅的!

那如何避免同一个文件不强制覆盖,有没有更好的解决方案呢(调一下味口)?我们一起来看一下第二种方案。

智能合并

思路:曲线救国,我们通过git merge 强大的分支合并功能来完成此次无缝合并。

首先使用git checkout根据A分支创建一个A_temp分支(避免影响A分支)

$ git checkout -b A_temp
Switched to a new branch 'A_temp'

然后将B分支合并到A_temp分支,此时两个都经修改过的文件会跑出冲突,我们只需解决冲突即可。

$ git merge B
Updating 1f73596..04627b5
Fast-forwardmessage.css                     | 0message.html                    | 0message.js                      | 0other.js                        | 1 +4 files changed, 1 insertion(+)create mode 100644 message.csscreate mode 100644 message.htmlcreate mode 100644 message.js

再次切换到A分支,并使用git checkoutA_temp分支上的系统消息功能相关文件或文件夹覆盖到A分支,此时可以大胆的覆盖!因为我们已经在第二步处理过冲突问题。

$ git checkout A
Switched to branch 'A'$ git checkout A_temp message.html message.css message.js other.js$ git statusOn branch AChanges to be committed:(use "git reset HEAD <file>..." to unstage)new file:   message.cssnew file:   message.htmlnew file:   message.jsmodified:   other.js

最后,有强迫症的患者可以卸磨杀驴,把刚刚根据分支A创建的A_temp删除。

$ git branch -d A_temp

OK,到此分支合并就完结了,现在我们就可以自信地召唤产品经理(我们公司产品兼测试)测试这两个功能。

扩展

另外给大家介绍一下git merge 使用的小技巧

举例:要把master分支合并到dev分支

git checkout dev //切换到dev分支
git merge master --no-ff // 使用--no-ff

默认使用merge命令是ff,即 fast-forward,这种方式从Git 合并历史中是无法查看到是哪几个提交对象在一起实现了一个功能。

--no-ff 标记会在分支合并的时候,创建一个新的提交对象,可以避免丢失master分支的历史信息,并且把所有的功能叠加在一起提交上去。两者的区别如下图所示,大家可以自己体验一下两者的区别。

两者的区别
以上就是小明工作中使用git合并总结的经验,希望能帮助到大家,仅供参考,有错误请指出,谢谢!

这篇关于Git从其他分支merge个别文件/文件夹【一个值5万的小技巧】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870412

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的