git reset とは何か?使い方と注意点

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 の位置を確認し、誤って重要なコミットを削除しないようにしましょう。