解釋 Git 中的 cherry picking


Cherry picking 是一種從一個分支中選擇特定提交併將其應用到另一個分支的方法。在想要從拉取請求中選擇特定更改時很有用。

git cherry-pick {commit_hash}

上面的命令將為當前分支 cherry pick 與指定提交雜湊關聯的提交。

在圖表中顯示的上述提交中,我們只需要將特徵分支中的提交 F1 應用到主分支。

在這種情況下,在 cherry pick 之後的主分支如下所示。

示例

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo
$ git init
Initialized empty Git repository in E:/tut_repo/.git/

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ echo hello>hello.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git add .

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git commit -m 'hello'
[master (root-commit) cac1d77] hello
1 file changed, 1 insertion(+)
create mode 100644 hello.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ echo hello 2 >> hello.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git commit -am 'c2'
[master 4f10a5d] c2
1 file changed, 1 insertion(+)

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git branch feature

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git switch feature
Switched to branch 'feature'

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ echo world>world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git add .

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git commit -m 'F1'
[feature 9b5ddf0] F1
1 file changed, 1 insertion(+)
create mode 100644 world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ echo world again>>world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git commit -am 'F2'
[feature 629c15d] F2
1 file changed, 1 insertion(+)

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git checkout master
Switched to branch 'master'

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git log --oneline --all --graph
* 629c15d (feature) F2
* 9b5ddf0 F1
* 4f10a5d (HEAD -> master) c2
* cac1d77 hello

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ echo hello3>>hello.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git commit -am 'C3'
[master 81cdced] C3
1 file changed, 1 insertion(+)

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git log --oneline --all --graph
* 81cdced (HEAD -> master) C3
| * 629c15d (feature) F2
| * 9b5ddf0 F1
|/
* 4f10a5d c2
* cac1d77 hello

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git cherry-pick 9b5ddf0
[master 693bff8] F1
Date: Tue Mar 30 13:43:50 2021 +0530
1 file changed, 1 insertion(+)
create mode 100644 world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git log --oneline --all --graph
* 693bff8 (HEAD -> master) F1
* 81cdced C3
| * 629c15d (feature) F2
| * 9b5ddf0 F1
|/
* 4f10a5d c2
* cac1d77 hello

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ ls
hello.txt world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ cat world.txt
world

更新於: 30-4-2021

367 次瀏覽

開啟您的 職業

完成課程並獲得認證

開始
廣告