🔖
Git初心者のための git reset オプション完全解説
はじめに
Gitを使用していて「コミットを戻したい」「変更を取り消したい」と思ったとき、git reset
を使います。
その際使われるのが、 --soft
/ --mixed
/ --hard
という3つのオプションです。
これらの違いを理解せずに使ってしまい、ファイルが消えたり、変更が元に戻っていたりして慌てた経験をした方も多いのではないでしょうか。
本記事では、この3つのオプションの違いと、それぞれの安全な使い分け方を解説します。
git reset
とは
コミット履歴(HEAD)や作業ツリー(Working Tree)、ステージ(Index)をどう書き換えるかを制御するコマンドです。
変更を“なかったこと”にできますが、使用するオプションによって影響を受ける範囲が大きく異なります。
用語補足
用語 | 説明 |
---|---|
コミット履歴(HEAD) | 現在のコミット(履歴の最新地点) |
ステージ(Index) |
git add で一時保存された、コミット準備中の状態 |
作業ツリー(Working Tree) | ファイルを直接編集しているローカルの状態 |
--soft
, --mixed
, --hard
の違い
オプション | HEAD(履歴) | ステージ(git add 済) |
作業ツリー(ファイルの編集) |
---|---|---|---|
--soft |
過去に戻る | 保持(ステージされたまま) | 保持(編集も残る) |
--mixed (デフォルト) |
過去に戻る | リセット(ステージ解除) | 保持(編集も残る) |
--hard |
過去に戻る | リセット(ステージ解除) | リセット(編集も消える)⚠️ |
用途
-
--soft
:履歴(HEAD)だけを戻すため、コミットをやり直したいときに便利です。 -
--mixed
:ステージの状態を解除し、作業ツリーはそのまま。git add
を取り消したいときに適しています。 -
--hard
:全ての状態(履歴・ステージ・作業ツリー)を完全にリセットします。慎重に使用しましょう。
使用例
--soft
:
コミットメッセージを間違えたとき
git reset --soft HEAD^
git commit --amend
--mixed
:
git add
したけどやめたいとき
# git reset --mixedと同じ意味
git reset
--hard
:
ブランチが煩雑になっているので、全てリセットしたいとき
# origin/main の状態に完全に巻き戻します(ローカル変更は全て消えます)
git reset --hard origin/main
※ ただし--hard
は要注意。git stash
で一時保存してから行う。
reset
とrevert
の違い
-
reset
:履歴を書き換える(ローカル専用) -
revert
:新しいコミットで取り消す(安全・共有向け)
🚨 共有ブランチでは git reset
を使うと他の人の履歴にも影響を及ぼすがあります。
→ 基本的に reset
はローカル作業用、revert
は共有ブランチ用 と覚えましょう。
まとめ
git reset
は便利ですが、使い方を間違えると取り返しがつかないこともあります。
まずは --soft
で様子を見る
→ それでも不要なら --mixed
→ 最終手段として --hard
は慎重に。
Git操作で困ったときは、まず履歴を消さずに安全な方法から試すことをおすすめします。
Discussion