スポンサーリンク
git reset --soft HEAD^で直前のgit commitを取り消す
git reset --soft HEAD^で直前のgit commitを取り消すことができます。
このとき、git addのインデックス登録は残る状態になります。
実際にやってみましょう。
下記のように、新規ファイルを作成します。
$ mkdir dir002 $ cd dir002/ $ touch file001.txt file002.txt $ cd ..
git statusすると、
$ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) dir002/ nothing added to commit but untracked files present (use "git add" to track)
git addします。
参考:カレントディレクトリ以下を再帰的にgit addする
$ git add dir002/
git statusすると、
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: dir002/file001.txt new file: dir002/file002.txt
git commit します。
$ git commit -m "Tmp commit" ・・・省略・・・ 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dir001/dir002/file001.txt create mode 100644 dir001/dir002/file002.txt
git statusすると、
$ git status On branch master nothing to commit, working tree clean
ここで、git reset --soft HEAD^を実行します。
$ git reset --soft HEAD^
git statusすると、git commitが取り消されて、git addのインデックス登録は残っているのが確認できます。
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: dir002/file001.txt new file: dir002/file002.txt
スポンサーリンク
git reset --hard HEAD^で直前のgit commitを取り消す & ワーキングツリーの変更も削除する
git reset --hard HEAD^をすると、直前のgit commitを取り消されると同時に、ワーキングツリーの変更も削除すれるので注意が必要です。
下記のように、git commitします。
$ git commit -m "Tmp2 commit" ・・・省略・・・ 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dir001/dir002/file001.txt create mode 100644 dir001/dir002/file002.txt
git statusすると、
$ git status On branch master nothing to commit, working tree clean
ここで、git reset --hard HEAD^を実行します。
$ git reset --hard HEAD^ HEAD is now at 62d39d6 1st commit
git statusすると、ワーキングツリーの変更も消えているのが確認できます。
$ git status On branch master nothing to commit, working tree clean
dir002ディレクトリが消えていますね。git reset --hardは慎重に行うことが必要ですね。
$ ls dir002 ls: dir002: No such file or directory
スポンサーリンク