logo サブスレッド

git cherry pick使い方

普段は開発ソースをGitを使って管理をしていますが、git-cherry-pick の機能を使う事が多くないのでどのような振る舞いをするのか備忘録として書きます。

そこで、git-cherry-pickを実行した時にコミットログがどの様に変化するのか追ってみることにしました。

今回はブランチfooとブランチhoge のブランチを2つ作成してみました。
変化がわかるようにgit-cherry-pickの実行前のコミットログが以下のように様になっています。

  • ブランチ foo
$ git log
commit c5fe5750888d4d50c0b37f7c1c773bdaf0096263 (HEAD -> foo)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 17:02:51 2021 +0900

    add foo

commit 5ef0cc14e8a471030c9ecbf8feb5de79b653b991 (master)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:29:22 2021 +0900

    first
  • ブランチ hoge
$ git log   
commit d08f42a20c35be5a5f0be6dd513940ff46979701 (HEAD -> hoge)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:50:28 2021 +0900

    add hoge

commit 5ef0cc14e8a471030c9ecbf8feb5de79b653b991 (master)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:29:22 2021 +0900

    first

ゴールは、git-cherry-pick機能と用いてhogeブランチのコミットをfooブランチへ取り込むことです。
実際に操作をした手順をまとめました。

  • 取り込みたいコミットのハッシュ値をgit logコマンドを使って探します。
    • hogeブランチにあるコミットのd08f42a20c35be5a5f0be6dd513940ff46979701eを取り込みたいのでメモだとかクリップボードコピーをします。
$ git checkout hoge 
Switched to branch 'hoge'
$ git log
commit d08f42a20c35be5a5f0be6dd513940ff46979701 (HEAD -> hoge)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:50:28 2021 +0900

    add hoge

commit 5ef0cc14e8a471030c9ecbf8feb5de79b653b991 (master)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:29:22 2021 +0900

    first
  • 作業ブランチをfooブランチに変更します
$ git checkout foo  
Switched to branch 'foo'
  • git-cherry-pickを使ってfooブランチにコミットのd08f42a20c35be5a5f0be6dd513940ff46979701を取り込みます
$ git cherry-pick d08f42a20c35be5a5f0be6dd513940ff46979701
[foo 4f0cf57] add hoge
 Date: Mon May 10 16:50:28 2021 +0900
 1 file changed, 2 insertions(+)
 create mode 100644 hoge.py
  • fooブランチのコミットログを確認をすると、コミットの4f0cf574acfd3c9e56260154eb5a94fd72ab5760は3.で取り込んだコミットを取り込んでいる。
$ git log 
commit 4f0cf574acfd3c9e56260154eb5a94fd72ab5760 (HEAD -> foo)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:50:28 2021 +0900

    add hoge

commit c5fe5750888d4d50c0b37f7c1c773bdaf0096263
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 17:02:51 2021 +0900

    add foo

commit 5ef0cc14e8a471030c9ecbf8feb5de79b653b991 (master)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:29:22 2021 +0900

    first
  • hogeブランチのコミットログを確認を確認すると、コミットのd08f42a20c35be5a5f0be6dd513940ff46979701は消えることはなくhogeブランチに存在しています。
$ git checkout hoge
Switched to branch 'hoge'
$ git log
commit d08f42a20c35be5a5f0be6dd513940ff46979701 (HEAD -> hoge)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:50:28 2021 +0900

    add hoge

commit 5ef0cc14e8a471030c9ecbf8feb5de79b653b991 (master)
Author: yoshida-kei < ○○○@×△□ >
Date:   Mon May 10 16:29:22 2021 +0900

    first
  • よって、コミットのd08f42a20c35be5a5f0be6dd513940ff46979701の差分は、hogeブランチとfooブランチに存在するようになります。
現在の位置:サブスレッド ホーム > 技術ブログ > git cherry pick使い方