How to merge code

背景

由于历史原因,我们git repository有 global 维护的Develop主分支,还有一个基于Develop为了运行case进行改动的local维护的APAC 主分支,Develop上不能执行case,APAC分支可以执行case,所有code changes都要push到Develop上,为了日常执行case再把Develop上的change merge到APAC分支上。

当有新feature开发的时候,我们要基于APAC主分支再创建一个APAC_Feature分支,完成cases的设计及实现,运行成功后要提交到Develop主分支,如果在当前APAC_Feature提PR的话,对比Develop主分支会有很多冲突文件,还得反复把冲突文件revert后,确保只提交当前的改动,很是烦人。另外在Develop主分支上创建Develop_Feature分支,如果直接git merge APAC_Feature 把APAC_Feature上的change合并到当前Develop_Feature分支上,其实不止最近的change,之前的change也合并了,又造成一些意外的改动,也是相当烦人的。

以上就是我目前工作中遇到的困境,我就只想merge某个commit而已,不想牵涉到其它版本不一致的文件,我想git一定有这种功能,所以查阅了一下资料,总算可以一劳永逸了,减去了没必要的人力工作。

git merge 和 git cherry-pick区别

git merge
在这里插入图片描述
当前在master分支上,git merge topic,会把topic上所有的提交A,B,C都合并到master分支生成一个新的提交
在这里插入图片描述

git cherry-pick
合并某一个或多个commit changes
git cherry-pick commitHash

a - b - c - d  Master
     \      
       e - f - g Feature

上面的a-g表示commit hash id,当前在Master分支上,执行git cherry-pick f, 会把Feature分支的commit f合并到Master分支上,生成一个新的提交。

a - b - c - d - h   Master
       \      /
        e - f - g   Feature

git cherry-pick branch-name
git cherry-pick Feature,合并Feature分支的最近一次commit,就也就是commit g

a - b - c - d - h   Master
       \        /
        e - f - g   Feature

合并多个commits

command comment
git cherry-pick HashA HashB 合并commit A和commit B
git cherry-pick HashA。。HashB 合并commitA到commit B
git cherry-pick HashA^。。HashB 合并commitA到commit B,不包含commitA

实践
当前分支情况:

a - b - c - d   Develop
      \
        e - f  APAC

新Feature开发时需要写新cases, 先sync最新code,创建新分支, 写cases。

git checkout Develop
git pull
git checkout APAC
git merge Develop
git branch APAC_Feature
git checkout APAC_Feature
git add .
git commit -m "Added new cases for new feature"
git log

查看并记录commit id–HashH

a - b - c - d   Develop
      \       \
        e - f - g APAC
                 \
                   h APAC_Feature

Develop上创建Develop_Feature分支,合并APAC_Feature上的commit H,Push到remote上就可以提PR了。

git checkout Develop
git branh Develop_Feature
git cherry-pick HashH
git push --set-upstream origin Develop_Feature
              i  Develop_Feature
             /
a - b - c - d   Develop
      \
        e - f - g APAC
                 \
                   h APAC_Feature

PR complete后,新的change就merge到了Develop上了:

              i  Develop_Feature
             /  \
a - b - c - d -  j  Develop
      \
        e - f - g APAC
                 \
                   h APAC_Feature

猜你喜欢

转载自blog.csdn.net/wumingxiaoyao/article/details/109258192
今日推荐