直前のコミットを取り消す

HEAD だけ戻す。

$ git reset --soft @~

HEAD とインデックスを戻す。(git add も戻す。)

$ git reset @~

ワーキングツリーの変更を全て元に戻す。(※ファイルに加えた変更は失われるので注意)

$ git reset --hard @~

参考:

Git でやらかした時に使える19個の奥義 – Qiita

git commit --amend を取り消す

HEAD の履歴を確認する。

$ git reflog

HEAD を一つ前の状態に戻す。(git add も取り消す。)

$ git reset HEAD@{1}

HEAD を一つ前の状態に戻す。(git add はそのまま残す。)

$ git reset --soft HEAD@{1}

参考:

git commit --amend の取り消し | rilakkuma3xjapan’s blog

git merge を取り消す

マージの履歴を確認する。

$ git log --oneline --graph

マージコミットを取り消す。(マージ直後は ORIG_HEAD で元のコミットを参照できる。)

$ git reset --hard ORIG_HEAD

参考: 

Git でやらかした時に使える19個の奥義 – Qiita

git merge を取り消す | tweeeety のぶろぐ的めも

ファイルの変更を取り戻せないケース

Git で変更を取り戻せないケース

  • コミットしていない変更を git checkout で上書きした。
  • コミットしていない変更を git reset --hard で上書きした。

回避方法

  • エディタのバックアップ機能を使う。
  • git stash -u で退避して履歴を残しておく。
  • 作業ブランチに WIP としてこまめにコミットする。

参考:

Can git undo a checkout of unstaged files – Stack Overflow

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です