git Cherry pick学习

 

问题:

 一个branch重演(Cherry pick)另一个branch的commit,是根据什么逻辑来更新当前branch的呢?

实践1:

1、现有2个Branch:dev1和dev2,同一个文件test.txt,初始内容如下:(为了理解直观,下面的revision号是加工后的)

dev1:revision:d000001

config-dev1

add01 by dev1

 dev2:revision:c000001

config-dev2

add01 by dev2

 2、对dev1的文件编辑,如下

config-dev1

add01 by dev1

add02 by dev1

 提交之后revision变成:d000002 

3、切换到dev2,选择从dev1的revision:d000002提交来重演,结果没有发现冲突。重演后dev2的文件内容如下:

config-dev2

add01 by dev2

add02 by dev1

 

实践2:

 1、现有2个Branch:dev1和dev2,同一个文件,初始内容如下:

(为了理解直观,下面的revision号是加工后的)

dev1:revision:d000001

config-dev1
update01 by dev1

 dev2:revision:c000001

config-dev2
update01 by dev2

 2、对dev1的文件编辑,如下

config-dev1
update02 by dev1

 提交之后revision变成:d000002

3、切换到dev2,选择从dev1的revision:d000002提交来重演,结果发现冲突。重演后dev2的文件内容如下:

config-dev2
<<<<<<< HEAD
update01 by dev2
=======
update02 by dev1
>>>>>>> d000002... update

 4、通过Edit conflicts来查看冲突内容

test.txt.BASE.txt             -->对应dev1的revision:d000001

config-dev1
update01 by dev1

 test.txt.LOCAL.txt          -->对应dev2的revision:c000001

config-dev2
update01 by dev2

 test.txt.REMOTE.txt       -->对应dev1的revision:d000002

config-dev1
update02 by dev1

 

结论:

1、重演的内容只是针对另一个branch上重演对象的commit版本与前一个commit版本的差分;

2、检查冲突的比较对象是,当前branch的最新版本与另一个branch上重演对象的前一个commit版本,

     比较内容不是全部,只是重演对象commit的更新部分,即差分部分。

     也就是说更新差分以外即使是内容不一致也不会产生冲突。

以上观点只是基于本人实践后的推论,并非官方文档,如有错漏请谅解。

 

posted @ 2018-12-29 14:59  一年之旦  阅读(112)  评论(0编辑  收藏  举报