在工作中,时常遇到开发分支需要合并某一个分支的一块功能(并非全部代码),此时利用Git的策略机制有两种可靠的方案。
假设开发分支为 feature-base ,想要合并的分支为 feature-task,需要合并的部分功能为任务流
使用 checkout + merge 实现智能合并
-
首先使用
git checkout根据 feature-base 分支创建一个 feature-temp 分支 (过渡分支)git checkout -b feature-temp -
然后使用
git merge合并 feature-task 分支,任务流功能对应的部分文件可能会和 feature-temp 分支产生冲突,解决冲突即可git merge feature-task -
再次切换到 feature-base 分支,将使用
git checkout将 feature-temp 分支上的任务流功能相关文件或文件夹覆盖到 feature-base 分支(已经处理过冲突,可以强制覆盖)git checkout feature-basegit checkout feature-temp taskA.vue taskB.vue task.js -
删除冗余分支 feature-temp
git branch -D feature-temp
使用 cherry-pick 来捡出部分代码变动
git cherry-pick命令的作用,就是将指定的提交应用于其他分支
常用命令介绍
-
git cherry-pick <commitHash>: 此命令就会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值是不一样的 -
git cherry-pick <branch>: 此命令就会将branch最新提交应用到当前分支 -
git cherry-pick <HashA> <HashB>:此命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交 -
git cherry-pick A..B: 此命令可将 (A , B] 的所有提交应用到当期分支。它们必须按照正确的顺序放置: 提交 A 必须早于提交B,否则命令将会失败,但不会报错 -
git cherry-pick A^..B: 此命令同上,但应用区间为 [A,B]
参考文章: