於多分支的代碼庫,將代碼從一個分支轉移到另一個分支是常見需求。
這時分兩種情況。一種情況是,你需要另一個分支的所有代碼變動,那么就采用合並(git merge
)。另一種情況是,你只需要部分代碼變動(某幾個提交),這時可以采用 Cherry pick。
cherry-pick
假如現在有兩個分支v1.0,v1.1。
v1.0有如下commit:
commit 4d3b38f3e6b9f49776f6e2d2861f0425e10df8d6 (HEAD -> v1.0) Author: bin <bininhere@163.com> Date: Tue Mar 19 10:33:43 2019 +0800 feature5 commit 65ad383c977acd6c7e7bed486bbf3631851a9eda Author: bin <bininhere@163.com> Date: Tue Mar 19 10:30:44 2019 +0800 feature4 commit a2a438f2652166f13a6a2aa36f447968fff3b15d Author: bin <bininhere@163.com> Date: Tue Mar 19 10:30:09 2019 +0800 feature3
現在v1.1需要合並feature4的功能,但不能合並feature3,feature5,怎么辦?
把代碼復制過來嗎?不!用cherry-pick
git cherry-pick 65ad383c977acd6c7e
如果文件有沖突,cherry-pick 會中斷,
你解決沖突后,使用git add添加沖突文件,使用git cherry-pick --continue完成cherry-pick操作。
或者使用git cherry-pick --abort中斷操作。
如果你cherry-pick的是別人分支的commit,可能會遇到錯誤fatal: bad object ...
,那是因為git cherry-pick是本地特性,本地要有這個commit才可以被git cherry-pick。如果沒有這個commit id,就會出現這個錯誤。
http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html