直前のコミットを取り消す
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 を取り消す or キャンセルする方法 | まさかろぐ
git commit --amend の取り消し | rilakkuma3xjapan’s blog
git add を取り消す
最初のコミット前の場合、git rm
コマンドに --cached
オプションを付けて実行する。
$ git rm --cached -- path/to/file
何かしらコミット済みの場合、git reset
コマンドで HEAD
の状態に戻す。
$ git reset @ -- path/to/file
参考:
git add したファイルを取り消しする方法! | Qumeru マガジン
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
最初のコミットを取り消す
git update-ref
コマンドを使う。
$ git update-ref -d HEAD
参考:
初回のコミットを取り消したいときには git update-ref を使う | すずけんメモ
git の最初のコミット (initial commit) を revert したい | 69log
How to revert initial git commit? – Stack Overflow
How to remove the first commit in git? – Stack Overflow
git revert コマンド
参考: