Gitのcherry-pickを試してみた

はじめに

この記事では、「Gitのcherry-pickの基本的な使い方」について書いています。

Gitにはたくさんのコマンドがあり、また自分は普段TortoiseGitを使っていて全然コマンドを覚えてないので、自分でコマンドを試しながら学んでいます。

自分に向けた備忘録でもありますが、「Gitのcherry-pickコマンドの使い方が分からない」な人の一助になれば嬉しいです。

本文

Note

試した際の環境は以下の通りです。

cherry-pickを行うには、以下のようにコマンドを書きます。

git cherry-pick <コミットID>

では試してみましょう

まず、ブランチは以下のようにmaintopic_aの二種類が存在する構成になっているとします。

  main
  topic_a

そして、topic_aで行ったコミットの一つをmainにcherry-pickしていきます。

cherry-pickするためにはコミットしたIDを調べなければいけないので、以下のコマンドを実行して調べます。

git switch topic_a
git log --online

すると、以下のような出力が返ってきます。

...(省略)...
9c296ed (HEAD -> topic_a, origin/topic_a) add new file
...(省略)...

上の出力の先頭の9c296edの部分がコミットIDです。

ではmainブランチにこのコミットの変更をcherry-pickします。

git switch main
git cherry-pick 9c296ed

まずブランチをmainに切り替えるのを忘れないようにしてください。

これでtopic_aブランチで行った9c296edの変更のみをmainブランチに取り込むことができました。

注意

コミットIDについて

今回、git log --onelineでコミットIDを取得しました。

また、git logでもコミットIDを取得でき、こちらは長い文字列(正式なもの?)のIDを得る事ができます。

、、、が、この長い方のIDをcherry-pickで指定しても失敗します

理由などは分かっておりませんが、私の環境で試したところ

fatal: bad revision '...'

と出て取り込むことができませんでした。なのでコミットIDを取得する際はgit log --onelineを使用するのが良いと思います。

コミットせずにcherry-pickしたい

cherry-pickコマンドは、そのまま使うと指定したコミットを取り込んでそのままコミットまで行います

「取り込みたいけどコミットまでしなくていい」という場合は-nオプションをつけ、

git cherry-pick -n <コミットID>

と書いて下さい。

おわりに

「Gitのcherry-pickの基本的な使い方」について解説しました。

さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。

https://rfs.jp/server/git/gite-lab/git-cherry-pick.html

https://www.wdic.org/w/TECH/git%20cherry-pick