某個commit,比如 c1,,最早是在a分支做的,當被cherry-pick到b分之后,還是一樣的revision嗎?
實驗1:c1被cherry-pick到別的分支后,revision不變對嗎?(答案是變了)
做實驗:
- 從main分支拉出
test_cherry_pick1
和test_cherry_pick2
分支,起點一樣。 - 在
test_cherry_pick1
分支,新增改動,提交得到 c1(42f31d5c96be19a4b5f00e7e986799147ba66139) - 切換到
test_cherry_pick2
,cherry-pick c1 到該分支 - 檢查一下兩個分支關于該改動的uuid(commit id)是否一樣?
結論
大為震驚,居然不一樣,得到的是 0a5f55380aec54880a0759102c4841dd467b39d0, 跟之前的居然不一樣!!
實驗2:三點對比和兩點對比
關于 github 的三點對比
- 三點對比commit差異
- 兩點對比絕對差異
做實驗:
- 從main分支拉出 test_two_way_diff1 和 test_two_way_diff2 分支,起點相同
- test_two_way_diff1 分支修改某個文件的a行,提交,產生 c1(aa400fb)
- test_two_way_diff2 分支修改該文件的的b行,提交,產生c2 (e872e65)
- 合并 test_two_way_diff2 到 test_two_way_diff1 (產生了c3 4a38f1e 來承載合并)
- 使用三點對比和兩點對比,感受一下對比的結果的差異
-
三點比較:因為所有在 test_two_way_diff2 的commit,在test_two_way_diff1 都包含,所以是沒有差異的(這種就是對比了commit)
三點比較是因為用三個點
...
隔開兩個比較的分支,如:https://github.com/xxxxx/test_pr_private/compare/master…test_cherry_pick1兩點比較是用了兩個店
..
如:https://github.com/xxxxx/test_pr_private/compare/master…test_cherry_pick1
可以看到 test_two_wa_diff1 分支按照時間由近到遠是由這些
commit組成的
4a38f1e
e872e65
aa400fb
…
所以可以發現,其實將 test_two_way_diff2 合并到 test_two_way_diff1之后,其 e872e65 也是被囊括在 test_two_way_diff1 里了這就是為什么用兩點對比(對比commit)的時候 test_two_way_diff2相對于 test_two_way_diff1 沒有任何更改,因為2里有的1都有了沒有更多需要合并過來的commit了
-
兩點比較:比較的是
..
后面的分支相較于前面的分支的絕對差異(文件的差異)可以看到文件差異肯定是有的,畢竟 test_cherry_pick1 里頭有些改動是 test_cherry_pick1里所沒有的,文件之間是有差異的