git cherry-pick 使用
用途
在本地分支合入其他分支时,如果不想对整个分支进行合并,而只想对其中的某一次提交合并到当前本地分支,就需要使用 git cherry-pick 。
应用场景
在实际的项目开发过程中,经常会在版本迭代的过程中,发现一些老版本遗留的问题。这时候,在新版本上针对该问题提交的修复,使用 git cherry-pick 就很容易应用到老版本上了。
例如:我们在某个项目的 feat/1.2.0 版本分支进行开发时,发现了 feat/1.1.0 版本遗留下来的一个问题。我们在 feat/1.2.0版本将其修复之后,还想将该修复应用于 feat/1.1.0 版本,这时候,只需要使用 git cherry-pick 命令即可。
操作流程
假设我们在 feat/1.2.0 分支,并且已经针对 feat/1.1.0分支的问题进行了修复,产生了一次提交 09f76ee4a 。(如何查看提交的哈希序列: git log –oneline -3 , 单行显示最近 3 条提交信息)。
具体流程如下:
- 切换到目标分支: git checkout feat/1.1.0
- 应用修复: git cherry-pick 09f76ee4a
- 应用成功之后直接 git push
- 如果成功应用修复,会有类似如下信息:
1
2
3
4$ git cherry-pick 09f7ee67e
[feat/1.1.0 87f15e9ef] fix: xxxxxxxxx
Date: Wed Sep 4 12:44:49 2019 +0800
1 file changed, 10 insertions(+), 1 deletion(-) - 如果出现如下类似信息:说明出现冲突,需要手动修复(具体流程与 git merge 冲突解决相同)。解决冲突之后,使用 git add 和 git commit 命令手动进行提交。
1
2
3
4
5git cherry-pick 49006ed7a
error: could not apply 49006ed7a... fix: xxxxxxxxxx
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
补充
- 如果要放弃本地 cherry-pick 恢复到命令执行之前的状态,使用命令 git cherry-pick –abort
- 如果有多个提交,并且中间过程出现冲突,解决冲突之后,使用 git cherry-pick –continue 继续下一个提交
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SailY Blog!
