git cherry-pick 使用
简介
git cherry-pick
用于把某些现有的commit
合并到当前分支,合并的内容就是该commit
产生的改变。
通常场景:
在某个分支开发了两个功能:功能A和功能B,假设产生了两个commit
:commitA和commitB,而本次功能上线只需要功能A,那么这个分支就无法往主分支合并,这个时候就可以通过cherry-pick
功能在一个新的分支上把功能A对应的commitA合并过来,这样就可以通过新分支把功能A合并到主分支,进行测试上线。
使用
- Demo
# 在分支A
$ git checkout A
# 功能1
$ touch feature-1.txt
$ git add feature-1.txt
$ git commit -m"feature1"
[A 0772c06] feature1
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 feature-1.txt
# 功能2
$ touch feature-2.txt
$ git add feature-2.txt
$ git commit -m"feature2"
[A 1655609] feature2
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 feature-2.txt
$ git log
commit 16556094a5e65eca7b2199ab492e2653fb6b5a5e
Author: sevenlin
Date: Thu Jun 27 15:03:30 2019 +0800
feature2
commit 0772c0682b2885c59413545e0a1a8e1fe5d9c9ee
Author: sevenlin
Date: Thu Jun 27 15:03:05 2019 +0800
feature1
# 切换为分支B
$ git checkout B
Switched to branch 'B'
# 使用cherry-pick 合并功能1
$ git cherry-pick 0772c0682b2885c59413545e0a1a8e1fe5d9c9ee
[B c2f67c3] feature1
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 feature-1.txt
# 查看已经合并过来
$ git log
commit c2f67c3d493bbe7cb4f5ffd1511a027c6c29281c
Author: sevenlin
Date: Thu Jun 27 15:03:05 2019 +0800
feature1
冲突
只要是合并就有可能冲突,那么在使用cherry-pick
的时候也需要注意冲突,如果发生冲突
- 可以解决冲突之后,可以通过
git cherry-pick --continue
处理合并 - 如果产生冲突不想合并,可以通过
git cherry-pick --abort
取消操作
总结
- 开发新功能的过程中尽量一个功能一个分支,这样可以减少部分功能上线的问题
- 某些特殊场景确实需要使用
cherry-pick
,那么需要对现有的commit有充分的了解,不然会导致不必要的冲突。
网友评论