git , cherry-pick

产品开发过程中,可能会在分支merge的情况中发生如下情况:

假设现在有两个分支 -master 和 -t1

在t1分支中先创建文件a,并commit

commit 23b2bce1b3fdfaa7505a7719d326e0160a0c25e4
Author: ****
Date:   Wed Feb 24 10:14:47 2016 +0800
add file a in t1

然后创建文件b,并commit

commit 8fd81bcb12927a80de22193545833a062bb8bf32
Author: *******
Date:   Wed Feb 24 10:15:31 2016 +0800
add file b in t1

但是由于某些原因,在从t1分支merge回master的时候,只想合并文件b,而不想合并文件a。

这时候可以使用cherry-pick命令来选择合并特定的commit。

git checkout master
git cherry-pick 8fd81bcb

这时候,在master分支下就只有b文件,而没有a文件。

在随后的开发过程中,修改了数次a文件,这时,如果想通过cherry-pick合并a文件:

git cherry-pick d7f182226c17c

这时往往会产生冲突(confliction),原因是,master分支和t1分支内的a文件相差数个commit版本,在合并时,git会认为同时对a文件做了修改。

使用

git status

可以查看冲突信息。

打开a文件,修改冲突部分,然后执行

git add .
git cherry-pick --continue 

合并成功

原文地址:https://www.cnblogs.com/starRebel/p/5212428.html