やりたいこと
- ブランチ A のいくつかのコミットを、ブランチ B、ブランチ C に分けたい。
- 具体的に言うと、ブランチ A に含まれるコミット A1 をブランチ B に、ブランチ A に含まれるコミット A2 をブランチ C に分けたい。
- 誤解語弊を恐れず直感的にに言えば、マージの逆の操作をしたい。
cherry pick コマンドと使い方まとめ
# commit1、commit2、commit3 があるとする。 # commit3 を適用したい (commit2 から commit3 の変更を取り込みたい) git cherry-pick commit3 # 次に紹介する使い方をよりよく理解するために。 # git cherry-pick commit3 は始点と終点のうち、始点を省略した形となる。 # commit3 の適用は、次のコマンドでも全く同じ結果となる。 git cherry-pick commit2..commit3 # コミット範囲を複数して cherry pick する時 # git cherry-pick <古いコミット>..<新しいコミット> # commit2 および commit3 を適用したい。 # (commit1 から commit2 および commit2 から commit3 の変更を取り込みたい) git cherry-pick commit1..commit3
具体的に、実践
$ # やりたいこと $ # import-another ブランチに e34b043 コミットを適用したい $ # testing ブランチに f72bf5b と 0e27219 コミットを適用したい $ $ # 作業前の状態を確認 $ git log --all --decorate --graph --online * 0e27219 (origin/feature11) デフォルト表示を変更 * f72bf5b test 画面の追加 * e34b043 インポート機能追加 問い合わせのため未完成 * 38fe6f1 (HEAD -> master, import-another, testing) feature10 リリース ... 略 ... $ # これより、作業開始! $ $ $ $ # import-another ブランチに e34b043 コミットを適用したい $ # 適用したいブランチ import-another にチェックアウト $ git checkout import-another Switched to branch 'import-another' $ # cherry pick で 38fe6f1 から e34b043 の差分を適用 $ git cherry-pick e34b043 [import-another 806b3c9] インポート機能追加 問い合わせのため未完成 Author user1 <user1@example.com> Date: Wed Dec 7 19:39:00 2016 +0900 7 files changed, 1477 insertions(+) create mode 100644 application/controllers/imp.php ... 略 ... $ # 適用を確認し、OK! $ git log --all --decorate --graph --online * 806b3c9 (HEAD -> import-another) インポート機能追加 問い合わせのため未完成 | * 0e27219 (origin/feature11) デフォルト表示を変更 | * f72bf5b test 画面の追加 | * e34b043 インポート機能追加 問い合わせのため未完成 |/ * 38fe6f1 (master, testing) feature10 リリース ... 略 ... $ $ $ $ # testing ブランチに f72bf5b と 0e27219 コミットを適用したい $ # 適用したいブランチ testing にチェックアウト $ git checkout testing Switched to 'testing' $ # cherry pick で e34b043 から f72bf5b および f72bf5b から 0e27219 の差分を適用 $ # git cherry-pick <古いコミット>..<新しいコミット> を使用するが、 $ # 次は誤り: git cherry-pick f72bf5b..0e27219 $ # 次が正しい: git cherry-pick e34b043..0e27219 $ git cherry-pick e34b043..0e27219 [testing dacd843] test 画面の追加 Author user1 <user1@example.com> Date: Wed Dec 7 20:39:00 2016 +0900 11 files changed, 75 insertions(+), 5 deletions(-) [testing 545fda4] デフォルト表示を変更 Author user1 <user1@example.com> Date: Wed Dec 8 18:39:00 2016 +0900 5 files changed, 14 insertions(+), 14 deletions(-) $ # 適用を確認し、OK! $ git log --all --decorate --graph --online * 545fda4 (HEAD -> testing) デフォルト表示を変更 * dacd843 test 画面の追加 | * 806b3c9 (import-another) インポート機能追加 問い合わせのため未完成 |/ | * 0e27219 (origin/feature11) デフォルト表示を変更 | * f72bf5b test 画面の追加 | * e34b043 インポート機能追加 問い合わせのため未完成 |/ * 38fe6f1 (master, testing) feature10 リリース ... 略 ...
おわりに
次のページが参考になりました。ありがとう存じます!
以上です。
「【Git】cherry pick を理解する。そして各コミットを別々のブランチに振り分ける実践例」への2件の返信
”cherry pick コマンドと使い方まとめ” において、2つ目と3つ目のgitコマンド内容が同じですが、コメントで実施される内容が異なっています。3つ目が誤っているように思えます。
コメントありがとう存じます!
ご指摘のとおりです。次のように訂正いたしました。
↓
この度はどうもありがとうございました。感謝いたします。