ワークツリーの変更を取り消すには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後は使用厳禁です。