git将某个分支的n次提交合并到任意分支

2,410 阅读2分钟

有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操作不熟。

截屏2022-05-07 下午5.20.55.png

合并commit记录

  • 假设我们想将 2 3 2个commit记录应用到 master 上。
  • 切换到dev分支。找到commit1HEAD(需要合并的commit记录区间 最后一个 加一)。
  • 执行 git rebase -i 58a0ac12 进入 vi 按 i 进行数据插入。
  • 将图中 pick 改为 s(squash的缩写)如第二张图。

截屏2022-05-07 下午5.14.49.png

截屏2022-05-07 下午5.15.19.png

  • 执行 :wq 保存并退出。
  • 如无冲突会进入到下图界面,可以修改合并后的commit信息。如不修改则是所有合并提交信息。 截屏2022-05-07 下午5.16.59.png
  • 修改 commit 提交信息为 合并 23 commit 截屏2022-05-07 下午5.17.48.png
  • 合并后git提交记录 截屏2022-05-07 下午5.22.01.png

commit记录合并到指定分支

  • 找到需要合并的commitId 或者 head。
  • 执行 git log

截屏2022-05-07 下午5.28.38.png

  • 切换到需要合并记录的分支,如需要将dev的某个commit提交合并到master,则切换到 master 分支执行命令。
  • 执行 git cherry-pick 768f7cb95664684bd9d4410480255127a65bb979
  • 如果存在冲突则需要解决冲突

截屏2022-05-07 下午5.43.58.png

截屏2022-05-07 下午5.48.52.png

总结

  • git cherry-pick 合并多个会保留 多个commit记录。
  • git rebase + git cherry-pick 组合可以把多个commit记录合成一个进行合并。
  • 两种方法都支持 任意 范围提交合并到任意分支。

参考