git cherry-pick
は特定のコミットを現在のブランチに持ってくるコマンドです。名前からも簡単に理解できるように、複数のコミットから特定のコミット(チェリー)だけを選ぶ行為と考えると分かりやすいです。
使用方法
すべてのコミットにはハッシュ値という固有のIDが存在し、これを使用して特定のコミットを取得できます。
基本コマンドは次のとおりです。
bash
git cherry-pick <commit-hash>
マージせずにそのコミット履歴をmainに持ってきてみましょう。
現在のmainブランチのログは次のとおりです。
コミットされた変更がmainブランチに持ち込まれ、HEADはcherry-pick
で持ってきたコミットを指すようになりました。
複数のコミットを持ってくることも、範囲を指定することもできます。
bash
# 複数のコミットを持ってくる
git cherry-pick <commit-hash1> <commit-hash2>
# 範囲で持ってくる
git cherry-pick <start-commit>..<end-commit>
主なオプション
-edit
または-e
:コミットメッセージを編集できます。-no-commit
または-n
:変更をステージングエリアにのみ追加し、コミットしません。-signoff
または-s
:コミットメッセージに署名を追加します。-x
:元のコミットハッシュをコミットメッセージに追加します。
いつ使うべきか
- バグ修正の適用
- 特定のブランチで発見されたバグを他のブランチにも迅速に適用する必要がある場合
- 例:本番ブランチの緊急バグ修正を開発ブランチにも適用する
- 特定機能の移行
- あるブランチで開発された機能の一部だけを別のブランチに持ってくる必要がある場合
- 例:実験的ブランチの成功した機能をメイン開発ラインに統合する
- リリース管理
- 特定のリリースに含まれるべき変更を選択的に持ってくる場合
- 例:次のバージョンリリースに含まれる機能を選択的に適用する
競合の注意
cherry pickもコミット履歴を持ってきて統合するものなので、いつでも競合が発生する可能性があります。
競合が発生した場合は、競合を解決して以下のコマンドで続行します。
bash
git cherry-pick --continue
追加オプション:
- Cherry-pickの中止:競合解決が複雑な場合やcherry-pickをキャンセルしたい場合
bash
git cherry-pick --abort
このコマンドはcherry-pick開始前の状態に戻します。
- 競合をそのままにして次のコミットに進む:複数のコミットをcherry-pickしている場合、現在の競合をそのままにして次のコミットに進むことができます。
bash
git cherry-pick --skip
- 3方向マージの使用:cherry-pick時に
-m
オプションを使用すると、3方向マージを実行します。これにより、競合解決が容易になる場合があります。
bash
git cherry-pick -m 1 <commit>