有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 3
2个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