Git | git reset
HEAD^ は「HEAD というコミットオブジェクトの1つ前のコミットオブジェクト」を意味する記法。
git reset HEAD^
$ git st (git)-[master][~/Sites/lang/git/gitusers]
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# new file: style.css
#
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: index.html
$ git ci -a -m 'ほげ' # 間違えて index.html も含めてコミットしたので取り消したい。 (git)-[master][~/Sites/lang/git/gitusers]
[master d9ea24c] ほげ
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 style.css
$ git reset HEAD\^ (git)-[master][~/Sites/lang/git/gitusers]
Unstaged changes after reset:
M index.html
$ git st (git)-[master][~/Sites/lang/git/gitusers]
# On branch master
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: index.html
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# style.css
no changes added to commit (use "git add" and/or "git commit -a")
git reset HEAD^ は、ワークツリーのファイルは変化しない。HEAD^ が記録している状態から作業を始めるように戻す。間違って作ったコミットは捨てられ、次のコミットは HEAD^ であったコミットの子供として作られるようになる。
git reset —hard HEAD^
$ git ci -a -m 'ほげ'; (git)-[master][~/Sites/lang/git/gitusers]
[master b9381d5] ほげ
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 style.css # ↑と同じ状態。間違えて index.html もコミットしてしまった。
$ git reset --hard HEAD\^ (git)-[master][~/Sites/lang/git/gitusers]
HEAD is now at b315e80 追加
$ git st (git)-[master][~/Sites/lang/git/gitusers]
# On branch master
nothing to commit (working directory clean)
$ ls (git)-[master][~/Sites/lang/git/gitusers]
index.html
git reset —hard HEAD^ はコミットしたくない変更までコミットしただけでなく、ワークツリーにした変更もすべて捨てたい場合に使う。
git reset —hard HEAD
git reset —hard HEAD は最新のコミット以来、ワークツリー中にしてきたすべての変更を取り消すことができる。
--------------------------------------------------------------------------------