コミットのCherry-pick
`git cherry-pick`を使って、あるブランチの個別のコミットを別のブランチに選択的に適用する方法を理解します。
「コミットのCherry-pick」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
コミットを選択して移動する
ブランチ全体ではなく、特定の1つの変更だけが必要な場合はどうすればよいでしょうか。git cherry-pickを使うと、リポジトリの履歴内のどこにあるコミットでも、1つだけ選んで現在のブランチに直接適用できます。
木からさくらんぼを1つだけ摘み取るようなものです。これにより、元のコミットと同じ変更を持つ新しいコミットが、現在のブランチに作成されます。
Cherry-pickを使う場面
大きな機能ブランチで作業していて、そこで作成した重要なバグ修正を、今すぐメインの本番ブランチにも適用する必要があるとします。機能ブランチ全体をマージするのはまだ避けたい状況です。
これはcherry-pickに最適な場面です。関係のない作業を持ち込まずに、独立した変更だけを移植できます。
基本コマンド
基本コマンドはシンプルです。git cherry-pick <commit-hash>と実行します。
- まず、コミットを適用したいブランチにいることを確認します。
- 次に、選択するコミットの一意な識別子(ハッシュ)が必要です。
- Gitは、同じ変更を持つ新しいコミットを現在のブランチに作成します。
git cherry-pick <commit-hash>コミットハッシュの確認
cherry-pickにはハッシュが必要です。git logを使って確認できます。
--onelineオプションを使うと、簡潔に表示できて便利です。
git log --onelineCherry-pickの準備
簡単な状況を準備しましょう。mainブランチとfeature/loginブランチを作成します。feature/loginに、mainへ移したいコミットを作成します。
「HOTFIX」コミットをmainへ移したいとします。
git init my_project
cd my_project
echo "Initial content" > file.txt
git add file.txt
git commit -m "Initial commit"
git branch feature/login
git checkout feature/login
echo "Login feature added" >> login.txt
git add login.txt
git commit -m "Add basic login feature"
echo "Fix: Login button style" >> style.css
git add style.css
git commit -m "HOTFIX: Fix login button styling"Cherry-pickの実行
では、mainブランチに戻り、「HOTFIX」コミットを適用しましょう。「HOTFIX: Fix login button styling」のハッシュがabcdefgだったとします。
実行すると、abcdefgと同じ変更を持つ新しいコミットがmainブランチに作成されます。git log --onelineで確認してみましょう。
git checkout main
git cherry-pick abcdefgCherry-pickのコンフリクトへの対処
マージと同様に、両方の履歴で同じコード行が異なる形で変更されていると、cherry-pickでもコンフリクトが発生することがあります。
- Gitは処理を一時停止し、コンフリクトが発生したファイルを示します。
- ファイル内のコンフリクトを手動で解消します。
- 解消したファイルを
git addします。 git cherry-pick --continueで完了します。
# After resolving conflicts in editor:
git add .
git cherry-pick --continue複数のコミットを選択する
一度に複数のコミットをcherry-pickすることもできます。
コミットの範囲(hashAから、hashBは含めない範囲)を選択するには、次のようにします。
git cherry-pick hashA..hashB使う場面と使わないほうがよい場面
Cherry-pickは強力な機能ですが、目的を考えて使いましょう。
- 適している場面:ホットフィックスや、関連のないブランチ間で小さく独立した変更を移植する場合。
- あまり適していない場面:大量の変更を定期的に統合する場合。重複したコミットが生じ、注意しないと履歴が追いにくくなる可能性があります。ブランチ全体を統合する場合は、マージまたはリベースを優先してください。
クイックチェック:Cherry-pickの目的
feature/new-designブランチに、重大なスタイルの問題を修正するコミットがあるとします。機能ブランチ全体をマージせずに、この修正だけをすぐにmainブランチへ適用する必要があります。
まとめ:変更を選択して適用する
このレッスンでは、特定のコミットを現在のブランチに適用する便利なコマンド、git cherry-pickについて学びました。
- 対象のブランチに、同じ変更を持つ新しいコミットを作成します。
- ホットフィックスや、独立した変更の移植に適しています。
- 通常は
git log --onelineで確認できるコミットのハッシュが必要です。 - マージと同様に、コンフリクトを解消する準備をしておきましょう。
cherry-pickを使いこなすと、プロジェクトの履歴を正確に管理できます。
よくある質問
「コミットのCherry-pick」レッスンは無料ですか?
はい。「コミットのCherry-pick」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「コミットのCherry-pick」で何を学びますか?
`git cherry-pick`を使って、あるブランチの個別のコミットを別のブランチに選択的に適用する方法を理解します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「コミットのCherry-pick」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- マージコンフリクトの手動解決
- 履歴のためのインタラクティブRebase
- コミットのCherry-pick
- Git Rerere で競合解決を再利用する