Git Cherry-pick 實戰:最佳實踐與應用場景
雖然我一直都知道 git cherry-pick 指令的主要功能是將指定的提交(commit)從一個分支應用到另一個分,然而,在我的個人開發經驗中,其實很少遇到需要使用 cherry-pick 的場景。直到最近,我在工作中實際用 git cherry-pick 應付了一些特定的工作情境,我才發現了 git cherry-pick 的妙用之處。這篇文章將介紹 git cherry-pick 的基本概念、實際應用方法,以及在多人協作中的最佳實踐,能夠幫助開發者在團隊協作的過程中更靈活地管理分支變更,提升工作效率。
git cherry-pick 基本概念
cherry-pick 功能
在使用 Git 進行版本控制的過程中,有時候我們需要將其他分支上的特定變更應用到當前分支,但又不想拿到該分支上的所有變更,這時候,git cherry-pick 就派上用場了。cherry-pick 允許我們從某個分支選取特定的提交(commit)並將其複製到當前分支,同時保留原始分支的提交記錄不受影響。
基本用法
git cherry-pick 的基本使用方法包括以下幾種:
-
撿取單個 Commit 過來合併
要將某個特定 commit 從一個分支撿取並合併到當前分支,可以使用以下命令:
git cherry-pick <commit-hash>例如,假設我們在 feature-branch 上有一個 commit a1b2c3d,我們希望將這個 commit 合併到 main 分支上:
git checkout main
git cherry-pick a1b2c3d -
撿取多個 Commit 過來合併
也可以一次撿取多個 commit,方法是指定一個 commit 範圍:
git cherry-pick <start-commit-hash>^..<end-commit-hash>例如,要將從 a1b2c3d 到 e4f5g6h 之間的所有 commit 合併到當前分支:
git cherry-pick a1b2c3d^..e4f5g6h -
撿取後先不合併
有時候可能也會想要撿取 commit,但先不合併,這時可以使用
--no-commit選項:git cherry-pick --no-commit <commit-hash>git cherry-pick --no-commit a1b2c3d這樣,變更會被應用到工作區,但不會立即生成一個新的 commit,讓我們有機會在合併前進行修改。
衝突處理
在使用 git cherry-pick 的過程中,如果發生衝突,Git 會提示我們手動解決衝突。衝突解決後,需要完成 cherry-pick 操作。
-
解決衝突後繼續 cherry-pick
解決衝突後,告訴 Git 已經解決並繼續 cherry-pick:
git add <resolved-files>
git cherry-pick --continue -
放棄 cherry-pick
如果不想繼續 cherry-pick,可以使用以下命令放棄操作:
git cherry-pick --abort