Git: Cherry-pick - 選擇某個分支的某些提交記錄

Git: Cherry-pick - 選擇某個分支的某些提交記錄

在開發階段的尾聲,準備合併回主線時,老闆說「B、C 功能會在這次上線,A 功能再等等吧」這時候就不是每個 Commit 都需要合併至主線了,而是挑出需要的就好,又為了維護主線的乾淨整齊,合併後只能有一個提交記錄。

這要怎麼做呢?

先來確認我們的目標

來看看要怎麼做。

假設開了一個新分支 test 實作功能。

使用 Terminal

提交記錄如下。

$ git log --oneline

5a0ffbc (HEAD -> test) C 功能的提交記錄
5edd113 B 功能的提交記錄
f748188 A 功能的提交記錄

選擇只要 5edd113 和 5a0ffbc 這兩個提交記錄來合併至 master。

$ git checkout master
$ git cherry-pick 5edd113 5a0ffbc -n

git cherry-pick 後接上參數 -n--no-commit,這樣就可以把這兩個 Commit 接到(可說是複製到) master 的尾巴上。不管是已存在或新增的檔案,這兩個 Commit 只是以暫存的方式存在,尚未提交。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

  modified:   hello_world.html

提交至倉儲後就可以推至遠端了。

$ git commit -m "合併 B、C 功能"
$ git push origin master

到 master 的歷史提交與檔案修改記錄上看一下,我們的確是從 test 挑出需要的提交記錄做合併,並且主線上只會看到一個合併的記錄!

使用 Sourcetree

主要看這三個提交紀錄 ec4a0a9、c8895d5 和 13e66a6。

ec4a0a9 ABC (branch: test)
c8895d5 XYZ (branch: test)
13e66a6 QAZ (branch: master)

Git: Cherry-pick - 選擇某個分支的某些提交記錄

選擇 ec4a0a9 和 c8895d5 做 cherry-pick。

Git: Cherry-pick - 選擇某個分支的某些提交記錄

按下確認後,就會接在目前所在分支的最後,也就是 13e66a6。

Git: Cherry-pick - 選擇某個分支的某些提交記錄

完工 (ゝ∀・)b


git cherry-pick git Sourcetree