結論から
以下のコマンドを使うと、--soft
モードでコミットを2つ戻します
$ git reset --soft HEAD^^
記事の後半では --soft
か--hard
の話や ^^
についての話を書きます
時間のある方はご覧ください
まずは検証
現在のコミット状況
$ git log --oneline
4527f6d (HEAD -> master) add: c
74d50cc add: b
e1622d9 add: a
2つコミットを戻す
$ git reset --soft HEAD^^
戻りましたね👏
$ git log --oneline
e1622d9 (HEAD -> master) add: a
ちょっと注意
ここでstatusを確認すると
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: b
new file: c
2つのファイルがステージングされていますね
下記のコマンドでuntrackedにしましょう
$ git restore --staged b c
ステージング前に戻りました
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
b
c
nothing added to commit but untracked files present (use "git add" to track)
あとはファイルを消したり、addしなおしましょう
--soft or --hard ??
--soft
上記で検証した通り、--soft
は HEAD (最新のコミットの状態) の位置のみ更新し、
インデックスの状態は変わりません
なので、検証の時のようにb
,c
ファイルがステージングされていました
--hard
ではhardだとどうなるのか?
インデックスやワーキングツリー(自分のファイルの状態)も戻ります
検証してみましょう
現在のコミット状況
$ git log --oneline
9a08549 (HEAD -> master) add: c
0c4a0b3 add: b
e1622d9 add: a
--hard
をつけてresetします
$ git reset --hard HEAD^^
HEAD is now at e1622d9 add: a
$ git status
On branch master
nothing to commit, working tree clean
$ ls
a
完全に消えましたね!
--mixed
default(何も指定しない)だと--mixed
になります
これはインデックスまで戻すため--soft
の際に行った
restore
後の状態になりますね
^^ってなに?
2つ戻すってことです
下記のコマンドだと4つコミットを戻すことができます
$ git reset --soft HEAD^^^^