写在前面
日常工作中经常会出现这样的场景,在正常功能开发中突然出现紧急情况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
,提交记录如下:
然后我们通过这两次提交cherry-pick合并到master,首先切换到master分支:
然后选择项目->git->show history,进入以下界面:
默认显示的是当前分支的提交记录,为了能够看到dev我们将检查历史的分支切换为2分支的提交记录dev2,如下:
此时可以看到dev提交记录如下:
接下来shift选择红框记录,然后右键cherry-pick如下图所示:
然后就可以了push到远端了。
如果一切都有,cherry-pick本质也是合并代码。合并代码有冲突怎么办?会提示失败。这个时候该怎么办?idea如果我们合并,我们会给出更友好的提示,但我个人建议一旦发生冲突,就不要使用它cherry-pick合并的方法可以考虑使用2:idea compare功能
方式。
2:idea compare功能
git根据以下操作,提供比较功能,通过比较,我们也可以轻松合并我们想要合并的内容:
手动点击中间的>>
比较合并就够了,因为是手工的,一定要小心,不要合并错误。
3:最佳实践★★★★★
以下两种情况:
1:如果是完全独立的修改(修改现有文件,没有其他修改或新添加的文件),则优先使用"1:cherry-pick",至于命令行的方式idea的GUI根据个人习惯推荐方法idea方法,效率高。 2:如有非独立修改(修改后的现有文件由他人修改而不合并,或添加不合并的新文件),则使用"2:idea compare功能",虽然效率相对较低,但安全性高,不易出现问题。对于新文件,手动CV即可。