1. 程式人生 > >git 一個可以提高開發效率的命令:cherry-pick

git 一個可以提高開發效率的命令:cherry-pick

各位碼農朋友們一定有碰到過這樣的情況:在develop分支上辛辛苦苦擼了一通程式碼後開發出功能模組A,B,C,這時老闆過來說,年青人,我們現在先上線功能模組A,B。你一定心裡一萬隻草泥馬奔騰而過,但為了混口飯吃必須得按老闆的意思辦事啊。 怎麼辦?一個辦法就是,重新建一個分支,然後再把功能模組C回退,留下功能模組A,B。這種做法不是不行,但是有更好的辦法,那就是git所提供的cherry-pick功能。 cherry-pick類似於一個定製化的merge,它可以把其它分支上的commit一個個摘下來,合併到當前分支。 廢話不多說,直接上例項。 比如我現在有個檔案a.c,我在develop分支完成了三個功能模組:feature A,feature B,feature C。如下圖: ![](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200929201721574-824982021.jpg) 現在,坑爹的老闆只要feature A,feature B,我們現在用cherry-pick命令直接把feature A,feature B的提交合併到master分支裡,如下操作: ![](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200929201724450-1851859502.jpg) 可以看到,功能模組feature A,feature B已經被合併到master分支裡。請注意,合併到master分支裡的提交雜湊值發生了改變,與原來的不同。 可以看出,cherry-pick命令使用方法很簡單,即: ``` git cherry-pick commitID ``` 剛剛是一個個提交cherry-pick到master分支,但如果有100個commit要合併到master分支呢?總不能這樣一個個操作吧?git一樣幫你想到了,它提供了一個區間操作方法。具體來講是這樣的: ``` git cherry-pick commit1..commit100 ``` 但是要注意,這是一個左開右閉的操作,也就是說,commit1不會被合併到master分支,而commit100則會。這樣的話上面的需求可以如下操作來實現: ![](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200929201726828-1900746941.jpg) 注意:上面講到cherry-pick命令每揀選一個commit就會提交一次生成一個新的commit id。 如果我們想讓每個commit 揀選後暫緩提交,等到所有commit都揀選完成後,自己手動commit,應該怎麼辦呢?答案是用-n 選項: ![](https://img2020.cnblogs.com/other/1218435/202009/1218435-20200929201729635-161268220.jpg) 怎樣,是不是很簡單?學會了cherry-pick命令媽媽再也不用擔心老闆時不時的頭腦發熱了。快掃描下方二維碼和良許一起學習更多git神操作! 更多精彩內容,請關注公眾號**良許Linux**,公眾內回覆**1024**可免費獲得5T技術資料,包括:**Linux,C/C++,Python,樹莓派,嵌入式,Java,人工智慧**,等等。公眾號內回覆**進群**,邀請您進高手如雲技術交流群。 ![img](http://pbe9kvqil.bkt.clouddn.com/FmsDX2j5rcQ7DjY8p-KYTN7m5uNu) --- 公眾號:良許Linux ### 有收穫?希望老鐵們來個三連擊,給更多的人看到這