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 |
dev2:revision:c000001
config-dev2 |
2、对dev1的文件编辑,如下
config-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 |
test.txt.REMOTE.txt -->对应dev1的revision:d000002
config-dev1 |
结论: |
1、重演的内容只是针对另一个branch上重演对象的commit版本与前一个commit版本的差分;
2、检查冲突的比较对象是,当前branch的最新版本与另一个branch上重演对象的前一个commit版本,
比较内容不是全部,只是重演对象commit的更新部分,即差分部分。
也就是说更新差分以外即使是内容不一致也不会产生冲突。
以上观点只是基于本人实践后的推论,并非官方文档,如有错漏请谅解。