LoginSignup
2
1

More than 1 year has passed since last update.

【git】cherry-pickはやっぱり美味かった🍒

Last updated at Posted at 2022-07-31

やりたいこと

ブランチをそのままマージしたくはないけど、特定のコミットだけを取り込みたい。
cherry-pickを使ってみる。
image_1.png

結論

◆他ブランチから指定したコミットを取り込んだ後に、そのまま自ブランチにコミットしてよいとき

git cherry-pick [コミットID]

◆他ブランチから指定したコミットを取り込んだ後に、そのまま自ブランチにコミットしないとき

git cherry-pick -n [コミットID]

検証

検証の流れ

  1. featureAブランチとfeatureBブランチをを作成
  2. featureAブランチにのみコミットを繰り返して、ファイルの中身を変更
  3. fearuteBブランチに追加したいコミット履歴のみfeatureAからcherry-pickする

1. file1とfile2を作成する。(初期状態)

◆file1

aaa

◆file2

bbb

2.featureAブランチにコミットを追加して、下記のようなファイル状態にする(最終)

◆file1

aaa
AAA
あああ

◆file2

bbb
BBB
びーびーびー

featureAブランチのコミット履歴

$ git log
commit 2b8d2984ba754b780f469ab32755df9bffd27c02 (HEAD -> fearureA)
Author: tatsuya1995
Date:   Sat Jul 30 18:08:29 2022 +0900

file2にBBBとびーびーびー追加

commit 0b253dd91db81953cf8d52eda0aa8f87442a51ec
Author: tatsuya1995
Date:   Sat Jul 30 18:06:53 2022 +0900

file1にAAAとあああ追加

commit 8eba7ea1f224dff44551cd85b478198b246437e2
Author: tatsuya1995
Date:   Sat Jul 30 18:03:26 2022 +0900

file1とfile2作成

※featureBブランチは初期状態のcommit 8eba7ea1f224dff44551cd85b478198b246437e2から派生したままにしているため、file2の中身は変更なしのまま。

3. cherry-pick実行

cherry-pickを行ない、featureBブランチにcommit 2b8d2984ba754b780f469ab32755df9bffd27c02のfile2に対する変更だけを取り込む。

$ git cherry-pick 2b8d2984ba754b780f469ab32755df9bffd27c02
[featureB ade1b86] file2にBBBとびーびーびー追加
Date: Sat Jul 30 18:08:29 2022 +0900
1 file changed, 3 insertions(+), 1 deletion(-)

◆featureBブランチのログ

$ git log
commit ade1b86f9258b8da8b80dc9cce86bc9627f87b8a (HEAD -> featureB)
Author: tatsuya1995
Date:   Sat Jul 30 18:08:29 2022 +0900

file2にBBBとびーびーびー追加

commit 8eba7ea1f224dff44551cd85b478198b246437e2
Author: tatsuya1995 [tatsuyawada1995@gmail.com](mailto:tatsuyawada1995@gmail.com)
Date:   Sat Jul 30 18:03:26 2022 +0900

file1とfile2作成

featureBの中身
◆file1

aaa

◆file2

bbb
BBB
びーびーびー

file2に対する変更したコミットのみ取り込まれた!
流れとしては下記のようになる。
image_2.png

git cherry-pick nオプション

ちなみにgit cherry-pick [コミットID]ではコミットもセットで行われるので、変更を取り込むだけにしたいときはnオプションをつければよい。

$ git cherry-pick -n 0b253dd91db81953cf8d52eda0aa8f87442a51ec
$ git status
On branch featureB
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified:   file1

git addされた状態で取り込まれる。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1