他人が触っているブランチと間違えてコミットしてしまった時など、直前のコミットを削除したい時があります。
git pushを取り消すには2つの方法があります。
- git revert コミットを打ち消す(履歴は残る)
- git reset コミットをなかったことにする(履歴は残らない)
ややこしいことにgit resetには3つの種類(オプション)があります。
-
- reset --hard:全てをマルっと消す。
- reset --mixed:commitとaddを取り消す。
- reset --soft:commitのみ取り消す。
--hardは容赦無く消してしまうため現在のファイルの中身が変わって困る場合使えません。addしたものを忘れられると困る場合は--softを利用します。(おおよその場合--softで十分だと思います)
実行時は作業したいブランチを切り替えます(チェックアウト checkout)。
git revert
## 直前のコミットの内容を打ち消すためのコミット $ git revert HEAD ## 直前のコミットがないか確認する $ git log --oneline ## 打ち消したコミットのプッシュする $ git push origin ブランチ名
revertは履歴を残すため、誤ったコミットとそれを打ち消すためのコミットの2つが残ります。
通常は圧倒的にrevertの方がいいですが、前述の通り純粋なオペミスなど不意に出来てしまった誤コミットは、revertすると不要な履歴が出来てしまうためresetしてしまったほうが良いと思います。
git reset
## 直前のコミットを取り消すが変更した内容は取り消さない $ git reset --soft HEAD^ ## 直前のコミットがないか確認する $ git log --oneline ## 強制的にプッシュする(履歴を書き換える) $ git push -f origin ブランチ名
git log --oneline
git log --oneline
を使うことで今いるブランチのコミットログを見る事ができます。
これでresetする前と後で直前のコミットが消えているか確認することができます。
コマンド実行後はLinuxのlessコマンドと同じためqで抜ける事が可能です。