git分支冲突问题解决 git cherry-pick

5,174 阅读1分钟

1.问题

公司在gitlab上有两个主要的公共分支,分别是公共仓库master,主要用于推代码上线的主要库;另一个是公共仓库bugfix分支,是用于热修小bug的分支。两个分支不能合并,会导致master版本混乱。

前段时间我需要热修一个小功能,然后基于bugfix分支开发了并且提交到了bugfix分支,之后就直接在这个分支上继续开发,改动较大,昨天我需要把我写完的部分提交到公共仓库的master分支上。但是发现把之前几次的bugfix的commit全部带到了公共仓库的master分支,如下图:

这样的情况下的mr是不能合并的。
我需要从基于bugfix分支开发的git log中,把我需要的commit 提交到公共仓库的master分支上,即需要可选分支,这里需要用到git的cherry-pick

git cherry-pick可以选择某一个分支中的一个或多个commit来进行操作

2.解决

git log | less 查看当前分支的log
git checkout master
git fetch --all
$ git rebase us/master 拉取最新代码
$ git status
$ git push
$ git status
$ git log |less
$ git branch
$ git checkout oldBranch 
$ git log  查看旧分支的log 获取需要的commit id XXX
$ git checkout master
$ git status
$ git checkout -b newBranch 基于公共仓库master 拉新分支
$ git cherry-pick XXXX 上面获取的commit id XXX (中间如果碰到冲突手动解决 然后再commit,再重新cherry-pick)
$ git status
$ git log 查看新分支 是否把相应的commit摘取过来
$ git status
$ git push -u origin newBranch 将commit直接推到私人新分支上
$ git status

3.总结

git是公司多人协作最重要的工具。