ワークツリーの変更を取り消すにはgit checkoutコマンドを使います。
git checkout -- <file>
以下のように指定したディレクトリ以下を再帰的に戻すことも可能です。
git checkout -- <directly>
README.mdを変更してから最後のコミットに戻します。
echo "## 変更部分" >> README.md
git checkout -- README.md
echoでREADME.mdに書き出されてgit checkoutで元に戻ったことが確認できたと思います。
ステージングを取り消すにはgit resetコマンドを使います。
git reset <file>
git reset
ファイルを指定しなければ全てのステージングを取り消す事ができます。
ひとまず、コミットしないファイルを作成し、ステージングします。
~/git_learning/ $ echo > remove.md
~/git_learning/ $ git add remove.md
git statusコマンドでステージングできた事を確認したらgit resetコマンドを用いて取り消します。
git reset remove.md
コマンド実行後、取り消せた事をgit statusで確認してください。
以降必要ないのでrm remove.mdでremove.mdは削除しましょう。
コミットのみを取り消しステージングエリアやワークツリーは、一切変更したくない場合に用いります。
git reset --soft HEAD^
HEADって何?大抵は最後のコミットを表しHEAD^で2つ前のコミットを表します。
同じようにHEAD^^^で4つ前のコミットを表しますがHEAD~3のように表記することもできます。
HEADのかわりにコミットハッシュを用いても同じです。
コミットとステージングを取り消しますが、ワークツリーは変更されません。
git reset --mixed HEAD^
ワークツリーも元に戻します。
git reset --hard HEAD^
ちなみにgit reset --hard HEADでステージングや作業ツリー全体の変更を最後のコミットまで戻すことができます。
git commit --amendを使うことで変更できます。
コミットハッシュが変わるのでpush後は使用厳禁です。