写在前面

在日常工作中经常会有这样的场景,在正常的功能开发中突然有紧急的bug修改,或者是紧急功能开发上线,在上线时又不能将正在开发中的功能合并到主干,此时我们就需要只合并需要紧急上线的代码到主干,接下来我们就看下这种情况如何处理。

1:cherry-pick

通过git的cherry-pick命令可以选择合并哪个提交id对应的修改到当前分支,接下来详细看下。

假设现在本地有master分支和dev两个分支,如下图:

PS D:\test\test-cherry-pick> git branch -vv* dev2   64af4de [origin/dev2] modify bbb.txt add 二二二master 10ac835 [origin/master] modify aaa.ttxt add 一一一

当前我们在dev2,当前假设提交记录如下:

PS D:\test\test-cherry-pick> git log -n2 --pretty=oneline
64af4de7d496fff9d68489e7ab6304589f00a0d1 (HEAD -> dev2, origin/dev2) modify bbb.txt add 二二二
5aed452f3bebebd87d6be48388f8dab57037cbb8 modify aaa.ttxt add 一一一

我们希望合并提交ID为64af4de7d496fff9d68489e7ab6304589f00a0d1的修改到主干,此时我们需要记下这个提交ID,然后切换到master,如下:

PS D:\test\test-cherry-pick> git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
PS D:\test\test-cherry-pick> git branchdev2
* master

然后使用命令git cherry-pick 提交ID进行合并,如下:

PS D:\test\test-cherry-pick> git cherry-pick 64af4de7d496fff9d68489e7ab6304589f00a0d1
[master 88c7faf] modify bbb.txt add 二二二Date: Tue May 17 18:07:05 2022 +08001 file changed, 2 insertions(+), 1 deletion(-)

然后就可以正常的push合并的信息到远程master了。其他的提交ID也可以通过这种方式来完成合并。在idea中也可以进行这种操作,都是如下的步骤:

1:切换到要合并代码的分支
2:获取要合并的提交,执行cherry-pick。

只不过使用idea是通过界面操作,而不是使用命令罢了,如下我们在dev2分支进行了如下修改,先增加了文件ddd.txt,然后增加了文件eee.txt,产生的提交记录如下:

然后我们将这2次提交通过cherry-pick合并到master,首先切换到master分支:

然后选中项目->git->show history,进入如下界面:

默认显示的是当前分支的提交记录,为了能够看到dev2分支的提交记录,我们将查看历史的分支切换为dev2,如下:

此时就可以看到dev2的提交记录了,如下:

接下来shift选中红框记录,然后右键cherry-pick即可,如下图:

接下来就可以push到远端了。

如果,凡事有如果,cherry-pick本质也是合并代码,如果是合并代码有冲突怎么办呢?会提示失败,此时怎么办呢?如果是idea的话会给出比较友好的提示让我们自己合并,但是个人建议一旦出现冲突,就不要采用cherry-pick方式来合并了,可以考虑使用2:idea compare功能方式。

2:idea compare功能

git提供了比较的功能,通过比较我们也可以很方便的合并自己想要合并的内容,按照如下操作:

手动点击中间的>>比较合并就可以了,因为是手工,一定要细心,不要合并错了。

3:最佳实践★★★★★

按照如下2种情况:

1:如果是完全独立的修改(修改已有文件,没有其他人修改,或者是新添加的文件),则优先选择使用"1:cherry-pick",至于命令行方式还是idea的GUI方式,根据个人习惯,推荐idea方式,效率高。
2:如果是存在非独立的修改(修改的已有文件也有他人修改且不可合并,或者是添加了不可合并的新文件),使用"2:idea compare功能",虽然效率相对低一些,但是安全性高,不容易出问题,对于新文件,手动CV即可。

git之如何合并部分提交相关推荐

  1. 记录idea整合git 创建分支 合并分支提交

    创建项目 在idea中创建所需的java项目 1(配置git 在File–>Setting->Version Control–>Git–>Path to Git executa ...

  2. git切换分支合并后再切回原来分支导致没有提交的代码丢失

    git切换分支合并后再切回原来分支导致没有提交的代码丢失 前言 在企业开发中,总会需要用远程仓库来管理整个团队的项目代码,git是我们常用的代码提交工具,虽然就我个人而言,在开发的过程中就只用到几个简 ...

  3. c++两个vector合并_这才是真正的 Git:分支合并

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...

  4. Git将主合并到功能分支

    本文翻译自:Git merge master into feature branch Let's say we have the following situation in Git: 假设我们在Gi ...

  5. 如何在Git中更改多次提交的作者和提交者名称以及电子邮件?

    我当时正在学校计算机上编写一个简单的脚本,然后将更改提交到Git(在笔驱动器中的一个回购中,该回购是从家里的计算机中克隆的). 经过几次提交后,我意识到我正在以root用户身份提交东西. 有什么办法可 ...

  6. 如何解决Git中的合并冲突

    如何解决Git中的合并冲突? #1楼 对于想要半手动解决合并冲突的Emacs用户: git diff --name-status --diff-filter=U 显示所有需要解决冲突的文件. 依次打开 ...

  7. 如何撤消Git中的最新本地提交?

    我不小心将错误的文件提交给Git ,但是我还没有将提交推送到服务器. 如何撤消本地存储库中的那些提交? #1楼 我想撤消我们共享存储库中的最新五次提交. 我查找了要回滚的修订版ID. 然后我输入以下内 ...

  8. 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...

  9. git Rebase 代替合并

    虽然合并(merge)操作可以用来简单和方便地整合改动,但是它却不是唯一的方法."Rebase" 就是另一种替代手段. 注释 虽然 rebase 相对于我们已知的整合操作来说有着比 ...

最新文章

  1. Bzoj3998: [TJOI2015]弦论
  2. 简单的Linux扫描仪应用:C语言实现
  3. JavaScript 中创建三种消息框:警告框、确认框、提示框
  4. NRF51822之动态广播使用
  5. Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】
  6. Centos下安装配置WordPress与nginx教程
  7. map/multimap用法详解
  8. LeetCode 144. 二叉树的前序遍历(前序遍历)
  9. Strus2第一次课:dom4j操作xml
  10. DeepMind科学家:强化学习足以满足通用AI需求
  11. SQL 怎么创建一个只有查询数据库用户权限呢
  12. 关于WORD VBA学习使用心得
  13. key位置 win10生成的ssh_Win10系统中生成SSH密钥的方法
  14. ubuntu dns 解析失败
  15. 最新!2016中国城市GDP排名出炉
  16. 图像算法工程师面试考点集锦
  17. platfrom设备驱动框架
  18. Python数据分析入门笔记4——数据预处理之重复值
  19. 关于yml文件图标为粉红色转成绿色的问题
  20. 数据库打开数据表_使用微数据打开您的数据

热门文章

  1. SAP 批量修改采购订单
  2. 可能是全网最详细的python安装教程(windows),小白建议收藏
  3. C#解析ip.ws.126.net的IP查询地区接口数据(使用正则表达式匹配获取所需数据)
  4. Categories各种举例
  5. sendToTarget与sendMessage
  6. Data Abort产生的原因
  7. 【C++】哈希——unordered系列容器|哈希冲突|闭散列|开散列
  8. 3.20 关于怎样做好小红书直播的一些技巧【玩赚小红书】
  9. Mac 安装 LaTeX(MacTeX)
  10. ubuntu 回到根目录,回到上一级 常用指令