Git如何做到同一个分支只上线部分功能 Cherry-Pick

介绍说明

在开发的时候,我们通常会在同一个开发分支(B)上,同时开发多个功能,但最终可能只需要上线(合并到master分支)部分功能。显然这时直接将B分支合并(pull request)到master分支,是会将所有提交都合并到master,所以这里我们无法直接使用pull requst。直接将B分支推送到master分支是同一个结果。

这时我们可以使用到cherry-pick命令拉取代码,cherry-pick可以做到commit维度的代码拉取,也就是只拉取某次commit中的所有代码变更。我们想要上线部分功能可以从这个命令入手。

git cherry-pick <commit id>

cherry-pick:选出自己喜欢的

案例

当俩分支(B、D)在同一个版本时,此时再在B分支开发功能,第一天B与M分支为同样的版本(即一样的代码),在第2、3、4天都有在B分支上开发新的功能或者做了修改,每次改动都会及时提交(commit)。到了第五天,经理说马上要上线用户查询和用户新增的功能到D分支,进行功能测试。

时间/天 B分支版本 D分支版本
1 版本1 版本1
2 版本2 (用户查询:commit1) 版本1
3 版本3 (用户查询:commit1)(登录功能:commit2) 版本1
4 版本4 (用户查询:commit1)(登录功能:commit2)(用户新增:commit3) 版本1
5 版本4 (用户查询:commit1)(登录功能:commit2)(用户新增:commit3) 版本4 (用户查询:commit1)(用户新增:commit3)

想要达到第五天的效果,我们可以使用cherry-pick,来选出自己想要的commit,来合并到D分支上。

#需要先切换到D分支后,再执行cherry-pick命令,可以将别的分支的commit选取拉到当前分支。
git cherry-pick commit1编号
git cherry-pick commit3编号

某一次commit的编号可以在git上查看

commit的编号可以在git上查看

可以从idea上查看

commit的编号可以在idea上看

当然也可以在commit之后使用git log命令查看

sou@xiangyudeMacBook-Pro chat-joy % git log
commit 1f2c871b162353879a38f93505d9fa1a6b126aa2 (HEAD -> master)
Author: xiangyu <1097679666@qq.com>
Date:   Tue Sep 27 11:08:06 2022 +0800

    user test2 method plus

commit 4f64089e5e936b5b6e929d0dd9f71a2fb2177373
Author: xiangyu <1097679666@qq.com>
Date:   Tue Sep 27 10:56:01 2022 +0800

    user test2 method

commit a23b90804d9a672d5d7eaf710e182fa4ad330974 (origin/master, origin/HEAD)
sou@xiangyudeMacBook-Pro chat-joy % git log
commit 1f2c871b162353879a38f93505d9fa1a6b126aa2 (HEAD -> master)
Author: xiangyu <1097679666@qq.com>
Date:   Tue Sep 27 11:08:06 2022 +0800

    user test2 method plus

commit 4f64089e5e936b5b6e929d0dd9f71a2fb2177373
Author: xiangyu <1097679666@qq.com>
Date:   Tue Sep 27 10:56:01 2022 +0800

    user test2 method

commit a23b90804d9a672d5d7eaf710e182fa4ad330974 (origin/master, origin/HEAD)

注意点

在拉取多个提交时应按照先后提交顺序拉取,并将某个功能的所有commit都拉取到以免代码丢失。

假如,只拉取commit3,但是commit3与commit1是在同一个文件中做修改,这是会有冲突出现。但是只拉取commit1而忘记了commit3,这时不会有冲突,但是后续便丢失了commit3的代码。

避免代码的冲突与丢失

为了避免冲突的出现与代码的丢失,我们可以做下面几点来预防:

  1. 创建一个自己独立的分支。避免多人使用同一个分支。
  2. 每次提交都只包含一个功能(能一起上线的功能)。这样可以在cherry-pick时更加方便。
  3. cherry-pick时可以用idea将某个功能的所有提交,全选出来,一次性都pick出来。或者,按照先后顺序将commit依次pick过来,直接pick多次修改后的commit会存在冲突。

先选中多个commit

idea中选中多个commit

再右键,Cherry-Pick

执行Cherry-Pick
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容