gitコマンドの使い方 ~ git cherry-pick ~

2020年4月6日git-command

git cherry-pick コマンド概要

git cherry-pick コマンドは特定のcommitの変更内容だけを取り込んで新しいcommitを作成します。

以下の図はmasterブランチでcommit(C)をcherry-pickした場合の例です。

git cherry-pick コマンドの使い方

git cherry-pick [commit-hash]

git cherry-pick [commit-hash]..[commit-hash]

個別に取得するcommitは1つもしくは連続する複数のcommitを指定することができます。

commit-hashはgit logコマンドで確認することができます。

cherry-pickの実行例

概要説明の図の内容を実際のコマンドで操作してみましょう。

まず、cherry-pickを行う前の状態までのcommit履歴を作成します。

(master)
$ echo 'aaa' > file-A.txt

(master)
$ git add .

(master)
$ git commit -m 'file-A add'
[master (root-commit) 153a3c9] file-A add
 1 file changed, 1 insertion(+)
 create mode 100644 file-A.txt

(master)
$ git branch develop

(master)
$ git checkout develop
Switched to branch 'develop'

(develop)
$ echo 'bbb' > file-B.txt

(develop)
$ git add .

(develop)
$ git commit -m 'file-B add'
[develop c326288] file-B add
 1 file changed, 1 insertion(+)
 create mode 100644 file-B.txt

(develop)
$ echo 'ccc' > file-C.txt

(develop)
$ git add .

(develop)
$ git commit -m 'file-C add'
[develop dc37c06] file-C add
 1 file changed, 1 insertion(+)
 create mode 100644 file-C.txt

(develop)
$ git log --oneline --all --graph
* dc37c06 (HEAD -> develop) file-C add
* c326288 file-B add
* 153a3c9 (master) file-A add

(develop)
$ git checkout master
Switched to branch 'master'

(master)
$ git log --oneline --all --graph
* dc37c06 (develop) file-C add
* c326288 file-B add
* 153a3c9 (HEAD -> master) file-A add

cherry-pickの対象となるcommit(C)のcommit-hashを確認すると「dc37c06」となっています。

 

cherry-pickで「dc37c06」を指定して実行しましょう。

(master)
$ git cherry-pick dc37c06
[master e39d673] file-C add
 Date: Fri Apr 3 13:41:06 2020 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 file-C.txt

 

git logとworking-directory(作業ディレクトリ)、staging-area(ステージングエリア)の内容を確認してみましょう。

(master)
$ git log --oneline --all --graph
* e39d673 (HEAD -> master) file-C add
| * dc37c06 (develop) file-C add
| * c326288 file-B add
|/
* 153a3c9 file-A add

(master)
$ ll
total 2
-rw-r--r-- 1 snow 1049089 4  4月  3 13:39 file-A.txt
-rw-r--r-- 1 snow 1049089 5  4月  3 13:41 file-C.txt

(master)
$ git ls-files
file-A.txt
file-C.txt

commit(B)の変更内容であるfile-B.txtが反映されていませんね。

これで、単独のcommitを取得することができました。

git cherry-pick の全てのオプションを確認する方法

以下のコマンドを実行するとブラウザでgit cherry-pickのヘルプページが表示される

git cherry-pick --help

Gitコマンドの使い方一覧

git-command

Posted by snow