【git チートシート】git reset でローカルの変更を取り消す

直前のコミットを取り消したい(ファイルの変更とaddはそのまま)
直前のコミットとaddを取り消したい(ファイルの変更はそのまま)
直前のファイル変更、add、コミット全てを取り消したい
コミットした後に実施したaddを取り消したい
コミットした後に実施したファイル変更とaddを取り消したい
間違えてresetコマンドを打ってしまい前の状態に戻したい
色々いじってしまったので前の状態を指定して戻したい
TIPS


直前のコミットを取り消したい(ファイルの変更とaddはそのまま)

$ git reset --soft HEAD^
# softオプションは [HEAD] を1つ前の状態にする

直前のコミットとaddを取り消したい(ファイルの変更はそのまま)

$ git reset --mixed HEAD^
# mixedオプションは [インデックスとHEAD] を1つ前の状態にする
# オプション指定無しだとmixedが実施される

直前のファイル変更、add、コミット全てを取り消したい

$ git reset --hard HEAD^
# hardオプションは [ワーキングツリー、インデックス、HEAD] を1つ前の状態にする

コミットした後に実施したaddを取り消したい

$ git reset --mixed HEAD
# mixedオプションをつけて [インデックス、HEAD] を現在のコミットの状態にする
# HEADの位置はそのままなので、インデックスの変更のみ消せる

コミットした後に実施したファイル変更とaddを取り消したい

$ git reset --hard HEAD
# mixedオプションをつけて [インデックス、HEAD] を現在のコミットの状態にする
# HEADの位置はそのままなので、インデックスの変更のみ消せる

間違えてresetコマンドを打ってしまい前の状態に戻したい

$ git reset --hard ORIG_HEAD
# mixedオプションをつけて [インデックス、HEAD] を現在のコミットの状態にする
# HEADの位置はそのままなので、インデックスの変更のみ消せる

色々いじってしまったので前の状態を指定して戻したい

$ git reflog
$ git reset [必要なオプション] [戻したい時点のhash値]
# git reflog でHEADの履歴を確認し、git resetにhash値を指定する

【TIPS】

●RESETコマンドのオプションについて
# よく使うのは soft / mixed / hard ( その他オプションは git reset -h で確認可能)
# softオプションは [HEAD(コミットの状態)] が対象
# mixedオプションは [インデックス(addの状態) + HEAD] が対象(=オプション指定無しの動作)
# hardオプションは [ワーキングツリー(ファイルの状態) + インデックス + HEAD] が対象

●HEADの指定方法について
# HEAD^ / @^ / HEAD~ は直前のコミットを意味する
# HEAD~{n} : n個前のコミットを指定できる
# ^の数と{n}の値は同じ意味を表すため、HEAD^^ / @^^ / HEAD~{2} は同じ
# HEADには、HEADのhash値でも指定可能

【git チートシート】gitの変更/差分確認方法

commitの履歴、ハッシュ値を確認
commitの変更点を確認
変更したファイルの一覧を表示
変更したファイルの差分を確認
add、commit後のファイルの差分を確認
最新のリモートリポジトリとの差分を確認
差分確認オプション


commitの履歴、ハッシュ値を確認

# 全てのcommitの履歴を確認
$ git log

# commitの履歴とそこで変更されたファイル名を表示
$ git log --name-only

# commitのハッシュ値+commitメッセージの1行目を表示
$ git log --oneline

# ブランチの分岐確認
$ git log --graph

# 指定文字列に一致するcommitのみを表示
$ git log --grep [文字列]

commitの変更点を確認

# 現在のブランチの1つ前のcommitの変更点を表示
$ git show

# 現在のブランチの1つ前のcommitの変更点を表示
$ git show [commitのハッシュ値]

変更したファイルの一覧を表示

# 全体の変更を確認
$ git status

# 特定のディレクトリ・ファイルの変更を確認
$ git status [ディレクトリパスorファイルパス]

変更したファイルの差分を確認

# 全体の差分を確認
$ git diff

# 特定のディレクトリ・ファイルの差分を確認
$ git diff [ディレクトリパスorファイルパス]

# commit同士の差分を確認
$ git diff [新しいcommitのハッシュ値] [古いcommitのハッシュ値]

add、commit後のファイルの差分を確認

# git add した後に変更点を確認する
$ git diff --cached

# git commit した後に変更点を確認する
$ git diff HEAD^

最新のリモートリポジトリとの差分を確認

# 最新のリモートリポジトリとの差分を確認する
$ git fetch origin master
$ git diff FETCH_HEAD

差分確認オプション

# 差分があるファイル名のみ確認
$ git diff --name-only

# 差分の量を確認
$ git diff --stat

# 差分の前後に表示される行数を変更 (前後に表示したい行数を指定)
$ git diff -U[行数]

# 行単位ではなく単語単位で差分を表示する
git diff --color-words

# 空行を差分として表示しない
git diff --ignore-blank-lines

# 空白や改行コードを差分として表示しない
git diff --w