Git cherry-pick を理解する

profile image

git cherry-pickは特定のコミットを選択的に別のブランチに持ってくるコマンドで、バグ修正、機能移行、リリース管理に役立ちます。

この記事は DeepL によって翻訳されました。誤訳があれば教えてください!

git cherry-pick は特定のコミットを現在のブランチに持ってくるコマンドです。名前からも簡単に理解できるように、複数のコミットから特定のコミット(チェリー)だけを選ぶ行為と考えると分かりやすいです。

Image.png

使用方法

すべてのコミットにはハッシュ値という固有のIDが存在し、これを使用して特定のコミットを取得できます。

Image.png

基本コマンドは次のとおりです。

bash
git cherry-pick <commit-hash>

マージせずにそのコミット履歴をmainに持ってきてみましょう。

現在のmainブランチのログは次のとおりです。

Image.png

Image.png

Image.png

コミットされた変更が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>
❤️ 0
🔥 0
😎 0
⭐️ 0
🆒 0