产品开发过程中,可能会在分支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
合并成功