gitコマンドの使い方 ~ git cherry-pick ~
目次
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設定
ログ&設定値確認
ステージングエリアの操作
ローカルリポジトリの操作
commitのエイリアスなど
commitの内容をステージングエリアや作業ディレクトリに反映