開発において、例えば変更したコードに不正なコードが混ざっていて、それをcommit・pushしたことによってアプリケーションが動かなくなってしまうことや、単に間違えてcommitしてしまうことなどもザラにあります。
強引な方法であれば、いくつかコミットを戻す方法はありますが、正しい知識を持ってcommitを戻さないと、リポジトリを破壊してしまうおそれがあります。
そこで今回は、
gitにcommitをしたが、コードが間違っていた。commitを戻す(取り消す)方法はないかな。
開発において、例えば変更したコードに不正なコードが混ざっていて、それをcommit・pushしたことによってアプリケーションが動かなくなってしまうことや、単に間違えてcommitしてしまうことなどもザラにあります。
強引な方法であれば、いくつかコミットを戻す方法はありますが、正しい知識を持ってcommitを戻さないと、リポジトリを破壊してしまうおそれがあります。
そこで今回は、
について紹介したいと思います。
最後までご覧いただき、参考にしていただけると幸いです。
スポンサーリンク
commitはしたが、まだpushはしていない状況でのcommitを戻す方法を紹介します。pushをしていないということは、そのcommitはまだリモートリポジトリには反映されていないということになります。つまりローカルリポジトリ上のコミットを戻せばいいということになります。
そのような状況で使うgitコマンドは、次のコマンドです。
git reset
このresetコマンドを使うことでローカルリポジトリ上でのコミットを戻すことができます。次のオプションと合わせて使用します。
それぞれのオプションを解説します。
まずはこのオプション。コマンドは以下の通りです。
git reset --soft HEAD^
HEAD^ は最新のcommitのこと。
つまり、一番新しいcommitを戻したいときに使用します。
このオプションをつけてresetすると、最新のコミットが「ステージング」段階に戻ってきます。
次にこのオプション。コマンドの記述方法は以下の通りです。
git reset --mixed HEAD^
このオプションをつけてresetすると、先ほどの--softとは異なり、最新のコミットが「ステージング」段階ではなく「変更」段階に戻ってきます。
最後にこのオプションです。コマンドの記述方法は以下の通りです。
git reset --hard HEAD^
このコマンドは、--softや--mixedと異なり、最新のコミットが「ステージング」段階にも「変更」段階にも戻ってきません。完全にコミットが消えるので、使用には少々注意が必要です。本当に不必要なコミットを取り消す場合以外は、使用しないようにしましょう。
次にcommitの範囲について解説します。
上記で解説したコマンドでは
HEAD^
を使用して、最新のコミットを指定しましたが、他にもオプションがあります。
それぞれ解説します。
まずはこのオプションです。戻したいcommitが複数あるとして、HEAD^を何度も実行すれば戻すことができますが、少々面倒ですね。そこで以下のコマンドを使用します。
git reset --オプション HEAD~3
このコマンドは、最新のコミットから3番目までのcommitを取り消します。HEAD^を3回行った場合と同じ状況になります。
次にこのオプションです。
git reset --オプション コミット番号
コミット番号の部分に、取り消したいcommitの中で、一番古いcommit番号を指定します。実行すると、そのcommitまで全てresetされます。resetしたいコミットが大量にある場合には、戻る回数を数える必要もないため、便利なコマンドです。
以上が、ローカルリポジトリでcommitを取り消す方法でした。
スポンサーリンク
次にpushしてしまった後に、commitを戻す方法を紹介します。
pushしたということはリモートリポジトリにもcommitが反映されてしまっているため、前述したresetをするだけでは、リモートリポジトリに変更が反映されません。それどころか、ローカルリポジトリのみでresetしてしまうと、リモートリポジトリとローカルリポジトリの間に差分が生まれてしまい、pushができなくなってしまいます。push済みのcommitについては、resetではなくrevertを使用します。
pushしたcommitはrevertコマンドで戻すことができます。記述方法は次の通りです。
git revert HEAD^
このコマンドを使用することで、リモートリポジトリのcommitを戻すことができます。
HEAD^ではなく、コミット番号を指定して、そのコミットだけをrevertする方法もあります。
git revert コミット番号
これらのコマンドを使えば、push後でも安全にコミットを戻すことができます。pushしてしまった場合は、resetではなく必ずrevertを使うようにしてください。
スポンサーリンク
ここまで、resetとrevertの方法について紹介しました。
これらは共同開発に限らず、当然個人開発でも活用できます。正しい知識を身につけて、安全なgit管理を行ってみてください。
ここまでお読みいただき、ありがとうございました。
スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク