有a,b两个分支, 需要把b分支的若干次提交合并到a分支。
方法1
- 使用
git cherry-pick git cherry-pick HEAD合并某一次commit记录到当前分支。git cherry-pick startHEAD .. endHEAD合并某个区间的commit记录到当前分支。
合并出现冲突
- 会停止合并的过程,需要使用其他操作继续。
- 继续合并
- 首先需要先解决代码冲突。解决后将文件进行暂存
git add . - 执行
git cherry-pick --continue继续合并。 - 会进入到 vi 界面,保存退出即可。
- 首先需要先解决代码冲突。解决后将文件进行暂存
- 放弃合并,执行
git cherry-pick --abort放弃合并会回归原始状态。 - 放弃合并,保留状态, 执行
git cherry-pick --quit会放弃合并但会保留当前的状态。
方法2
- 使用
git rebase+git cherry-pick - 通过
git rebase将多个commit合并为一个,然后通过git cherry-pick合并到具体分支。 - 不要在公共分支执行
git rebase尤其是自身对git操作不熟。
合并commit记录
- 假设我们想将
2 32个commit记录应用到master上。 - 切换到
dev分支。找到commit1的HEAD(需要合并的commit记录区间 最后一个 加一)。 - 执行
git rebase -i 58a0ac12进入vi按 i 进行数据插入。 - 将图中 pick 改为 s(squash的缩写)如第二张图。
- 执行
:wq保存并退出。 - 如无冲突会进入到下图界面,可以修改合并后的commit信息。如不修改则是所有合并提交信息。
- 修改 commit 提交信息为 合并 23 commit
- 合并后git提交记录
commit记录合并到指定分支
- 找到需要合并的commitId 或者 head。
- 执行
git log
- 切换到需要合并记录的分支,如需要将
dev的某个commit提交合并到master,则切换到master分支执行命令。 - 执行
git cherry-pick 768f7cb95664684bd9d4410480255127a65bb979 - 如果存在冲突则需要解决冲突
总结
git cherry-pick合并多个会保留 多个commit记录。git rebase+git cherry-pick组合可以把多个commit记录合成一个进行合并。- 两种方法都支持 任意 范围提交合并到任意分支。
参考
git rebase文档 git-scm.com/docs/git-re…git cherry-pick文档 git-scm.com/docs/git-ch…- zhuanlan.zhihu.com/p/355413226