写在前面

在日常工作中经常会有这样的场景,在正常的功能开发中突然有紧急的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 branch
  dev2
* 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 +0800
 1 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合并部分提交的实现的文章就介绍到这了,更多相关git合并部分提交内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部