場景:程序員A提交了一個commit到gerrit上,我們叫他為commit_id1,但是還沒有review,那就是沒有入庫,程序員B想再本地拿到這個commitd_id1,既然這個提交沒有入庫,很明顯,B單純執行git pull是拿不到這個提交的,那他要怎么辦呢,
目前我想到的有幾種方式:第一種如果只是單純了改了很少量的文件,我們不排斥程序員A把這幾個文件直接發給B。如果改動比較大呢?第二種,程序員A本地關於這個提交生成一個patch,發給B,B再在本地把這個patch打上,這是個不錯的方式。還有一種,完全不需要額外的動作,只要使用git cherry-pick就可以了。
所以,本篇的關注點是最后一種git cherry-pick的方式,如果想要使用patch的方式,參考我的另一篇博客:https://www.cnblogs.com/zndxall/p/8093455.html
然后B在本地執行了git cherry-pick commit_id1,接着報錯 fatal: bad object commit_id1了!!! 那是因為git cherry-pick是本地特性,本地要有這個commit才可以被git cherry-pick。但是他本地並沒有這個commit id,所以出現了這個錯。
既然用了gerrit,那么就用gerrit提供的cherry-pick就好了,如下:
(1)登陸gerrit頁面,找到A提交的commit_id1,點擊右上角的‘download’,然后復制cherry-pick那條,如下:
(2)然后再本地執行剛才復制的命令,執行,如下:
如果跟B本地的文件有沖突,會顯示error,然后執行git status 可以看到‘both modify’的字樣,告訴你了沖突文件,修改沖突文件即可。
如果沒有沖突,命令執行完,B本地執行git log 就可以看到A的commit_id1的提交了。