Gitのcherry-pickを試してみた
はじめに
この記事では、「Gitのcherry-pickの基本的な使い方」について書いています。
Gitにはたくさんのコマンドがあり、また自分は普段TortoiseGitを使っていて全然コマンドを覚えてないので、自分でコマンドを試しながら学んでいます。
自分に向けた備忘録でもありますが、「Gitのcherry-pickコマンドの使い方が分からない」な人の一助になれば嬉しいです。
本文
Note
試した際の環境は以下の通りです。
cherry-pickを行うには、以下のようにコマンドを書きます。
git cherry-pick <コミットID>
では試してみましょう
まず、ブランチは以下のようにmain
とtopic_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の基本的な使い方」について解説しました。
さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。