有的時候,我們在一個分支上提交了幾個commit,然后我們會需要提交到其他分支上,一般情況下,我們會采用的merge的方式來合並分支,另外一種方式是只需要其中幾個提交時,我們會cherry-pick到分支上,那么當要cherry-pick的幾個提交之間有依賴關系要怎么處理呢?
比如,我們在branch_test上修改了三個提交,分別是commit1,commit2,commit3,其中commit1的改動是添加了一個test.txt的文件,commit2是在test.txt文件中寫入了"test",commit3是再test.txt中追加了"test11",我們需要將這三個提交cherry-pick到branch_target分支上,很明顯,這三個提交是有依賴關系的。
commit3 (再將“test11”追加到test.txt)
commit2 (將“test”寫入test.txt)
commit1 (創建test.txt)
有的人可能會覺得,既然最后一個提交commit3已經是最終結果了,那么直接cherry-pick這個提交到目的分支上不就可以了嗎?其實是不行的,我在gerrit上直接cherry-pick這個提交到branch_target分支,報錯失敗,有沖突。既然有沖突,那么就解決沖突,我把這個提交使用命令行的方式cherry-pick到本地的branch_target分支上,結果報錯是“delete by us :test.txt ”,是因為這個文件在這個分支上並不存在,所以他就報這個錯了。
那么要怎么操作這種有關聯的提交呢,首先先把commit1 cherry-pick到branch_target上,並把提交合並到branch_target,然后再把commit2 cherry-pick到branch_target上,再把提交合並到branch_target上,最后commit3也是一樣的,cherry-pick到branch_target上,然后再合入提交。