git reset とは
git reset は、Git のコミット履歴やインデックス、作業ツリーの状態を変更するコマンドです。主に コミットの取り消しや ブランチの位置調整に使われます。
reset のモード
–soft
HEAD を指定したコミットに移動しますが、インデックス(ステージング領域)と作業ツリーはそのまま残ります。取り消したコミットの変更を再度コミットしたいときに便利です。
–mixed(デフォルト)
HEAD を移動し、インデックスをリセットします。作業ツリーはそのままなので、変更はステージング解除された状態で残ります。
–hard
HEAD、インデックス、作業ツリーのすべてを指定したコミットの状態に完全にリセットします。未保存の変更はすべて失われるので注意が必要です。
主な使い方の例
# 直前のコミットだけを取り消し、変更はステージングされたままにする
git reset --soft HEAD~1
# 2 つ前のコミットに戻し、ステージングは解除する(デフォルト)
git reset HEAD~2
# 特定のコミットにハードリセットし、作業ツリーも完全に戻す
git reset --hard abc1234
注意点とベストプラクティス
- 公開リポジトリへプッシュしたコミットに対して –hard を使うと、他の開発者に影響を与える可能性があります。必ずローカルでのみ使用するか、強制プッシュ (
git push --force) のリスクを理解した上で行いましょう。 - 作業ツリーの変更を失いたくないときは、–soft または –mixed を選択し、必要に応じて
git stashで一時保存してからリセットすると安全です。 - リセット前に
git log --onelineやgit reflogで現在の HEAD の位置を確認し、誤って重要なコミットを削除しないようにしましょう。