はじめに
開発を行なっているとgitコマンドは毎日使いますよね。一回pushしちゃったけどやっぱり取り消したい!そんな場面も多いはず。
「git pushした後だけど、間違えに気づいたから修正したい!」
「勢いでgit pushしたけど、一旦push前に戻して!」
そんな時に使う、pushを取り消す方法をお伝えします。
主な対処方法
gitのpushを取り消す方法は主に二つあります。
- git reset コマンド(取り消した、という履歴が残らない)
- git revert コマンド(取り消した、という履歴が残る)
対処方法その1. git reset
git reset コマンドを使用すると、前のコミットの状態に残ることができます。hardとsoftの2つのオプションを利用することで自分の行いたい修正方針に合わせることができます。
ローカルでの変更は残して、pushだけ取り消したい時、このコマンドを行うと、pushの直前の状態に戻ります。pushした差分がローカルに戻ってきます。このコマンドはよく使います。
git reset --soft HEAD^
直前に行ったcommitとaddのソースの変更を取り消すコマンドです。ローカルでの変更はいらない!という場合に使用します。
git reset --hard HEAD^
※直前のコミットのみ取り消すのであれば「HEAD^」で良いですが、直前のn個のコミットを取り消すのであれば「HEAD~n」と指定する必要があります。
注意点
git resetコマンドは過去の履歴を書き換える変更になりますので、状況によってはコンフリクトが発生する可能性があります。
またgit resetコマンドを実行して手元で修正し、再度pushを行う場合は「-f」オプションをつけてforce pushを行う必要があります。
git push -f origin ${ブランチ名}
対処方法その2. git revert
変更を取り消す、のではなく「変更を消したよ」という履歴を残して変更を打ち消す方法です。
git resetと違い過去の履歴を書き換えるものではないため、コンフリクトの発生を防止することができ、チームで開発している場合はより安全な取り消し方法です。
しかし、不要な履歴が増えてしまうのでチームで開発している場合以外はgit resetコマンドの方が良いかもです。
下記のコマンドでは「コミットを消したよ」という新しいコミットが作成されます。
git revert HEAD
git revertではコミットが一つ増えただけなので、普通に再度pushすることができます。
git push origin ${ブランチ名}
まとめ
誤ってgit pushをしてしまった場合、主に二つの方法で対処することができます。
- 消したよ、の履歴を残さずに修正したい場合:git resetコマンド
- 消したよ、の履歴を残して修正したい場合:git revertコマンド
開発の状況や場面に応じて適切なコマンドを使用して取り消し処理を行いましょう。