Menu
Coddy logo textTech

Git Reset

最終更新

git reset は現在のブランチを別のコミットへ移動し、モードに応じてステージングエリア(インデックス)とワーキングツリーをそれに合わせて更新します。3 つのモードは、その更新がどこまで及ぶかだけが異なります。--soft はブランチを移動して停止し、--mixed(デフォルト)はさらにステージングエリアもリセットし、--hard はさらに作業ファイルも上書きします。

--hard はコミットしていない作業を破棄するため、実行前にどのモードが必要かを把握しておきましょう。これらのコマンドはターミナルプレイグラウンドで安全に試せます - ブラウザ内の本物のシェルです。

3 つのモード

ModeMoves branchResets stagingResets working tree
--softはいいいえいいえ
--mixed (default)はいはいいいえ
--hardはいはいはい

構文

CommandWhat it does
git reset --soft HEAD~1直前のコミットを取り消し、変更はステージしたまま残す
git reset HEAD~1直前のコミットを取り消し、変更をステージから外して残す
git reset --hard HEAD~1直前のコミットを取り消し、変更を破棄する
git reset <file>ファイルをステージから外す(変更は保持)
git reset --hard origin/mainローカルブランチをリモートに強制的に一致させる

よくあるケース

GoalCommand
すべてをステージから外すgit reset
ファイル 1 つをステージから外すgit reset README.md
3 コミット戻して作業を保持するgit reset --soft HEAD~3
あるコミット以降のローカル変更をすべて破棄するgit reset --hard <hash>

Git reset のよくある質問

--soft、--mixed、--hard の違いは何ですか?
3 つともブランチのポインタを対象のコミットへ移動しますが、ほかに何を変更するかが異なります。--soft はそれ以外を何も変えないため、変更はステージされたまま残ります。--mixed(デフォルト)はさらにステージングエリアもクリアするので、変更はステージから外れますがファイルには残ります。--hard はさらにワーキングツリーを対象のコミットに合わせて上書きし、コミットしていない変更を破棄します。
git reset でファイルをステージから外すには?
git reset <file>(例: git reset README.md)を実行するか、パスを指定せずに git reset を実行してすべてをステージから外します。これはファイルをステージングエリアから取り除きますが、ワーキングツリーの編集内容は保持します。新しい Git では git restore --staged <file> も使え、同じことをより明示的に行えます。
git reset --hard は元に戻せますか?
ワーキングツリーからは戻せません - --hard はコミットしていない変更を完全に破棄します。ただし、reset で消したコミット済みの作業は通常復元できます。git reflog を実行してコミットのハッシュを見つけ、git reset --hard <hash> を実行します(またはそこにブランチを作成します)。一度もステージやコミットをしていない変更は復元できないため、--hard は慎重に使ってください。
git reset と git revert の違いは何ですか?
git reset はブランチを後戻りさせて履歴を書き換えます - ローカルのコミットには問題ありませんが、すでに push したコミットでは危険です。git revert は履歴をそのまま残し、以前のコミットを打ち消す新しいコミットを追加するため、共有ブランチには安全な選択肢です。
これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで git reset を実行できます - インストールは不要です。Coddy の無料インタラクティブ Git コースでも、リセットや変更の取り消しを段階的に扱っています。
Coddy programming languages illustration

Coddy で Git を学ぼう

始める