Git 中的 Cherry-Pick 合併提交

Abdul Jabbar 2023年1月30日
  1. Git 中的 git cherry-pick 命令
  2. Git 中的 Cherry-Pick 合併提交
Git 中的 Cherry-Pick 合併提交

當同一個團隊的多個開發人員正在開發一個專案時,無論該專案的複雜性大小,處理和管理 Git 分支之間的更改都變得非常困難。

有時,我們需要將一些特定的提交合併到另一個分支中,而不是合併整個分支,為此,我們使用 Git 中的一個基本工具,即眾所周知的 Cherry Picking。

當從倉庫分支的整個提交列表中僅選擇一個提交時,Cherry Picking 是一個很好的工具。

Git 中的 git cherry-pick 命令

git cherry-pick 是一個有影響力的命令,它允許將隨機 Git 提交從倉庫中的一個分支移動並新增到倉庫當前工作的 HEAD。此命令還有助於撤消與團隊過去開發相關的更改。

例如,如果我們不小心對錯誤的分支進行了提交,我們將轉移到正確的分支,並在倉庫的新分支中將提交挑選到正確的位置。

當使用 git mergegit rebase 時,來自一個分支的所有提交都是混合的。而 cherry-pick 命令使我們能夠選擇選定的提交進行同化。

Git 中的 Cherry-Pick 合併提交

挑選合併提交併不像看起來那麼容易。當我們執行合併過程時,我們同時使用同一個倉庫的兩個分支。

例如,使用 Git 命令將分支 parent-B 合併到 parent-A 分支中。

因此,當我們要挑選特定的提交,即與兩個父分支合併時,我們需要通過使用 -m 選項告訴 cherry-pick 命令應該使用 diff 來對抗哪個提交。我們將在以下命令中使用 commit hash 提及特定的父分支。

上述情況的語法解釋如下。

git cherry-pick -m <commit hash>

讓我們用上述命令的以下示例來解釋這種情況。

M - N - O - P - Q (branch A)
     \     /
      R - S - T (branch B)

如上所示,P 是合併提交。如果我們執行 git cherry-pick 命令,Git 將傳遞有關該命令的警告。

所以現在我們必須用提交 id 提及父分支號。它將在以下命令中執行。

git cherry-pick -m 1 P

這個 cherry-pick 命令將從上述示例中的 O- P 獲取所有提交。

我們還可以使用以下命令執行上述操作。

git cherry-pick -m 2 P

這將從上述示例中的 R- S- P 中選擇所有提交。

注意:使用 merge commit 命令在分支中挑選提交過於有害,因此在使用它時,請始終謹慎行事。丟失過去提交的歷史記錄的風險很高。

它破壞了我們在父節點中所做的所有更改,並且我們沒有在那個提交中定義 -m

作者: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn