本記事の対象者
「git pushした後に間違いに気が付いてしまった!」
「git pushする前に戻りたい!」
そんな方に向けてこの記事を書いています。
主な対処法
- git resetコマンド(履歴が残らずに修正できる)
- git revertコマンド(履歴を残して修正する)
対処法1.git reset
git reset
を実行すると、前のコミットの状態に戻ることができます。主にhardとsoftの2つのオプションを利用します。
$ git reset --hard HEAD^
このコマンドを実行するとcommit,add,ソースの変更を取り消すことができます。
しかし、ローカルでの変更等は残して、git pushだけ取り消したいという場合があると思います。その場合は以下のコマンドを実行してください。
$ git reset --soft HEAD^
このコマンドを実行するとコミットのみを取り消すことができます。
注意点1
git reset
の後に、修正した内容をpushしようとすると、以前のコミットとコンフリクトしてエラーとなり、pushできません。
そのため、「-f」オプションをつけて強制的にpushする必要があります。
$ git push -f origin HEAD
これで何事もなかったように修正することができます。
注意点2
過去の履歴を書き換えてしまうので、チーム開発をしているとコンフリクトが起きる可能性があります。
注意点3
git reset
の際に、直前のコミットのみ取り消すのであれば「HEAD^」で良いですが、直前のn個のコミットを取り消すのであれば「HEAD~n」と指定する必要があります。
対処法2.git revert
変更を取り消すのではなく、打ち消すことができます。(履歴は残る)
git reset
とは異なり、過去の履歴を書き換えることがないため、安全だと言えます。
$ git revert HEAD
このコマンドを実行すると、過去のコミットを打ち消す、新しいコミットができるので、
$ git push origin HEAD
を実行すると再度pushすることができます。
注意点
git revert
は安全な取り消し方法ですが、不要な履歴が増えてしまうので、個人開発などではgit reset
の方が良いかもしれません。
まとめ
誤ってgit push
してしまった時の対処法は2つあります。
- git resetコマンド(履歴が残らずに修正できる)
- git revertコマンド(履歴を残して修正する)
それぞれメリット・デメリットはあるので、その場に応じたコマンドを選択しましょう。