Git Cherry Pick

git cherry-pick は、任意のGitコミットを参照によってピックアップし、現在の作業HEADに追加することを可能にする強力なコマンドです。 チェリーピックとは、あるブランチからコミットを選び、それを別のブランチに適用することです。 git cherry-pick は、変更を取り消すのに便利です。 たとえば、誤って間違ったブランチにコミットしてしまったとします。 正しいブランチに切り替え、そのコミットをあるべき場所にチェリーピックします。

When to use git cherry pick

git cherry-pick is a useful tool but not always a best practice. チェリーピックは重複コミットを引き起こす可能性があり、チェリーピックが機能する多くのシナリオでは、代わりに従来のマージが推奨されます。 とはいえ、git cherry-pick はいくつかのシナリオでは便利なツールです…

チームコラボレーション

しばしば、チームは個々のメンバーが同じコードで、あるいはその周辺で作業するのを見つけます。 たとえば、新しい製品機能には、バックエンドとフロントエンドのコンポーネントがあります。 2 つの製品部門間でいくつかの共有コードがある可能性があります。 バックエンドの開発者が、フロントエンドも利用する必要のあるデータ構造を作成するとします。 フロントエンドの開発者は git cherry-pick を使用して、この仮想的なデータ構造が作成されたコミットを選択することができます。

バグ修正

バグが発見された場合、できるだけ早くエンドユーザーに修正を提供することが重要です。 シナリオの例として、開発者が新機能の開発を始めたとします。 その新機能の開発中に、既存のバグを発見しました。 開発者は、このバグにパッチを適用する明示的なコミットを作成します。 この新しいパッチコミットは、より多くのユーザーに影響が及ぶ前にバグを修正するために master ブランチに直接チェリーピックすることができます。

変更の取り消しと失ったコミットの復元

時には、feature ブランチは古くなって master にマージされないことがあります。 時には、プルリクエストがマージされずにクローズされることもあります。 Git はこれらのコミットを決して失うことはありません。git loggit reflog といったコマンドを使えば、それらのコミットを見つけて生き返らせることができるのです。

How to use git cherry pick

git cherry-pickの使い方を説明するために、次のようなブランチ状態のリポジトリがあるとします:

 a - b - c - d Master
\
e - f - g Feature

git cherry-pick 使い方は簡単で次のように実行できます:

git cherry-pick commitSha

この例では commitSha がコミットの参照になっています。 コミットリファレンスは git log で見つけることができます。 この例では、masterのコミット `f` を使用する場合を想定しています。 まず、master ブランチで作業していることを確認します。

git checkout master

そして、次のコマンドでチェリーピックを実行します。

git cherry-pick f

実行後の Git の履歴は、このようになります。

 a - b - c - d - f Master
\
e - f - g Feature

The f commit has been successfully pick into the master branch

git cherry pick の例

git cherry pick また、いくつかの実行オプションが渡されることもあります。

-edit

-editオプションを渡すと、チェリーピック処理を適用する前にコミットメッセージを求めるプロンプトが表示されます

--no-commit

--no-commitオプションは、チェリーピックを実行する代わりに、新しいコミットが行われず、ターゲットコミットの内容を現在のブランチの作業ディレクトリに移動させます。

--signoff

--signoff オプションはチェリーピックのコミットメッセージの最後に ‘signoff’ 署名行を追加します

これらの役に立つオプションに加えて、git cherry-pick はさまざまなマージ戦略オプションも受け付けます。 これらのオプションについて詳しくは、git merge strategies ドキュメントを参照してください。

さらに、git cherry-pick はマージの競合を解決するためのオプション入力も受け付けます。 --abort --continue および --quit このオプションについては、git merge および git rebase に関してより詳しく説明します。

まとめ

チェリーピックは強力で便利なコマンドで、いくつかのシナリオでは非常に便利です。 チェリーピッキングは、git merge や git rebase の代わりに誤用してはいけません。 チェリーピックを行うコミットを見つけるには、git log コマンドが必要です。

コメントを残す

メールアドレスが公開されることはありません。