よくGit開発をしているときにmasterにcommitしてしまった!!ってときないですか??
masterで作業はしないようにと気をつけて居いたはずなのに、気づかぬうちにmasterで作業していてそのままmasterにコミットしてしまったと。。。
そんでもってまたかなりソースを変更してしまったと。。。
このブランチを捨てて別ブランチに移動してまた書き直すのは正直効率が悪いと思いつつブランチを移動してまた同じ作業をする。効率悪いと思いつつも一度コードは書いてるからさっきよりは早く書けるはずと自分に言い聞かせて渋々書き直す。
私のプロジェクトのチームでもこんな事が割と起こっています。
ですがそんな事しなくてもGitにはこれに対処出来るコマンドが用意されています!!
自分も調べるまで知らなくてわざわざブランチを移動してソースを書き直す失敗を繰り返していました。
こんな失敗を繰り返す人が減るように「cherry-pick」というコマンドの使い方を紹介したいと思います。
割と簡単なのでやってみてください!!
cherry-pickとは
cherry-pickコマンドはとあるブランチのコミットを他のブランチ に移動させることが出来ます。
例えばmasterにコミットをしてしまって「しまった!!」となってもべつのブランチに移動してmasterにしてしまったコミットを移すことが出来ます。
まさに求めていたコマンドだと思います。
では使い方を紹介します
cherry-pickの使い方
コミットIDを取得
たとえばmasterに間違えてコミットしてしまったことを想定して、まずはコミットログを確認してコミットIDを取得してください。
git log
コマンドでコミットのログを確認することができますね。ここで間違ってコミットしてしまったコミットIDをメモとかどっかにコピーしておいてください。コピーする場所は何でも大丈夫です。後に使うので忘れないようにするためです。
コミットIDとは「27ad87gadi9a」こんな感じの英数宇の羅列のことです。
これをコピーしたら次の段階です。
ブランチを移動
作業するはずだったブランチに移動してください。
git checkout feature/hoge
本来はここで作業してここにコミットするはずだったのです。
ですがmasterにコミットしてしまった。。。
ってことでコミットを移し替えます!
cherry-pickを使う
今現在feature/hogeブランチにいます。
cherry-pickコマンドはここで使います。
「git cherry-pick commitID」というふうに使います。
git cherry-pick 27ad87gadi9a
コミットIDはもっと長いと思うのですが、最初の何文字かくらいで大丈夫です。
これだけでmasterにしていたコミットが作業ブランチに反映されます。
コンフリクト
コンフリクトする場合ももちろんあります。
コンフリクトしても焦らずにコンフリクトしているファイルを開いて手動でコンフリクトを解消してくだい。
コンフリクト解消したら「–continue」でcherry-pickモードを抜けます。
git cherry-pick --continue
これで完了。
なにもせずにcherry-pickモードを強制的に終了させたいときは「–abort」で終了出来ます。
git cherry-pick --abort
まとめ
以上です。
たったこれだけです。
手順としては
- ミスったコミットIDを取得
- ブランチを移動
- git cherry-pick commitID
です。
簡単ですね!
良いGitライフを。