GitのResetの3つのモードの違いを徹底解説|Gitやばい辞典

それは、突然やってくる。
この記事では、GitのResetの3つのモード「soft」「mixed」「hard」の違いを、VSCodeとコマンドライン(以下、コマンド)の両方で解説します。
Gitを覚えるのがつらい。でも、いざという時にGitが使えないのはやばい。どうせ覚えないといけないなら、さっさとマスターするのが吉。そんな現場ですぐに役立つGit実践集。それが「Gitやばい辞典」です。
【表で比較】GitのResetの3つのモードの違い
| オプション | HEADの移動 | ステージングのリセット | 作業ファイルのリセット | よく使われるシーン |
--soft | ✅ する | ❌ しない | ❌ しない | 直前のコミット内容を修正したい時 |
--mixed | ✅ する | ✅ する | ❌ しない | デフォルト。 ステージングだけやり直したい時 |
--hard | ✅ する | ✅ する | ✅ する | 変更を完全に破棄して過去に戻りたい時 |
【VSCodeで比較】GitのResetの3つのモードの違い


おまけ:Resetの2つの機能
| 機能の種類 | 具体的なコマンドの例 | 何(ターゲット)をリセットする? | HEAD(自分の居場所)は動く? | 備考 |
| ① インデックスのリセット | git reset HEAD <file> | 「ステージ(addした内容)」 ※VSCodeのステージングの「ー」は内部でこれをやっている | 動かない | addの取り消しだけ。内部的には、最新コミットをステージに**「上書き」**して add を消している(revert的な感じ) 現在はrestoreが推奨されている |
| ② HEADのリセット | git reset --hard <ID> | 「自分のいる場所(歴史)」 | 移動する | 指定したコミットIDの場所へ**「ワープ」**する(タイムマシン) |
① インデックスのリセットはrestoreへ
Git公式は2019年(Ver 2.23)、多機能だった reset からインデックスのリセット機能を restore として独立させ、コマンドの役割を明確に分担させました。

