0. 引言
最近在進行系統的多版本并行開發,涉及一些共有基礎功能提交時就遇到了麻煩,一份代碼需要向多個版本分支進行同步,以保證多版本都能有更新該基礎功能。
多次對比提交的方式顯然會帶來巨大的工作量。但實際上我們可以通過git的cherry-pick指令來簡化操作
1. cherry-pick簡介
cherry-pick 其作用就是將其他分支的單個提交合并到當前分支,其名字也很貼合——“摘櫻桃”,從分支樹上摘下來指定的幾顆。
其應用場景包括:
合并單個提交:當我們只想將某個分支上的某一次提交合并到當前分支時,可以使用cherry-pick命令,而不需要合并整個分支
修復bug:當我們在一個分支上修復了一個bug,并希望將這個修復同步應用到其他分支時
共性功能:當我們在一個分支上開發了一個新功能,這個功能可能屬于基礎性通用功能,也希望應用到其他版本時
2. idea界面操作
1、首先為了模擬操作,我這里創建了兩個分支:feature-v1.0, feature-v2.0。我們需要模擬的場景是:
- 在v1.0版本中開發并提交了一次通用功能
- 需要將v1.0提交的這次通用功能合并到v2.0版本中
我們首先在v1.0中模擬一次代碼提交
2、然后右下角將分支切換到v2.0
3、點擊左下角的Git選項,打開git提交歷史,并在菜單左側選中來源分支,即v1.0
4、找到我們要合并的提交,并選中,然后點擊窗口中的櫻桃圖標,或者右鍵菜單中點擊Cherry-Pick
,如果需要合并多次提交的話,就都選中然后點擊cherry-pick即可
5、成功合并后會看到提示信息
6、需要注意的是,如果前面選擇的分支是本地分支,那么還要將合并的代碼提交到遠端分支
7、合并后,我們就可以在本地以及遠端分支都看到這次提交的代碼了
3. git指令操作
1、首先進入到項目目錄下,切換分支到來源分支v1.0
git checkout feature-v1.0
然后執行git log
指令,查看歷史提交記錄
2、每次提交都有一個唯一的hash標識,找到你想要合并的那次提交,復制其hash
hash如:4bfc117cd967eaa56e0835847e901becf3787b25
3、切換到目標分支
git checkout feature-v2.0
4、執行cherry-pick指令,其指令語法如下,其中commit表示某次提交的hash值或者分支名,如果是分支名會將這個分支的提交都合并過去
git cherry-pick <commit>
如果需要合并多次,就將hash值用空格隔開即可
git cherry-pick hash1 hash2 hash3
我們將之前復制的hash值貼過來執行
git cherry-pick 4bfc117cd967eaa56e0835847e901becf3787b25
如此代碼就合并過來了
5、當然這里還只是提交到本地分支,如果要提交到遠端的話,執行git push
推送即可
總結
如上,我們就完成了針對某次提交的單獨合并操作,實際操作時更加建議使用idea的可視化操作,畢竟可能會涉及到代碼沖突,這時就需要我們手動解決沖突了