Gitでステージを解除する|編集を残すgit restore –stagedの使い方

  • 公開:2026.10.17
  • 更新:2026.10.16
  • 開発
Gitでステージを解除する|編集を残すgit restore –stagedの使い方

コミットに入れたくない変更までgit addしてしまっても、編集内容を残したままステージから外せます。作業中のファイルを元へ戻す操作と似ているため、どの場所を変更する引数かを押さえておくと安心です。

Git 2.23以降のgit restore --stagedを使い、対象のファイルだけをステージ解除する流れを紹介します。以下はPowerShellで、少なくとも一度コミットしたリポジトリのnotes.txtを編集し、すでにgit addした例です。


ステージされた差分を確認する

git status --short
git diff --cached -- notes.txt

git diff --cachedは、次のコミットに入るインデックスの内容とHEADとの差を表示します。git status --shortの2文字の状態表示は、左がインデックス、右が作業ツリーです。追跡済みファイルを編集してaddした状態なら、ファイル名の前にM と表示されます。

対象ファイルのステージを解除する

git restore --staged -- notes.txt

--stagedはインデックスを変更する指定です。この書き方では、インデックスのnotes.txtが既定の復元元であるHEADの内容に戻り、作業ツリーにある編集済みファイルは残ります。--より後ろが対象パスです。

git restore notes.txtのように--stagedを外すと、通常は作業ツリーを復元する操作になります。また--worktreeを一緒に指定すると作業ツリーも変更するため、編集を残したい場面では追加しないでください。

編集が残っていることを確認する

git status --short
git diff --cached -- notes.txt
git diff -- notes.txt
 M notes.txt

今回の状態なら、statusは M notes.txtになります。--cached側の差分はなくなり、最後のgit diffに編集内容が表示されれば、ステージ解除後も作業ツリーの変更を確認できます。

addした後にさらに編集していた場合は、解除前の状態がMMになることもあります。ステージにあった版と現在の作業ファイルが異なるため、解除前に両方の差分を読むと、残す内容を判断しやすくなります。

必要な変更だけを再び追加する

git add -- notes.txt
git diff --cached -- notes.txt

内容を整えたら、同じファイルをもう一度addできます。その後のgit diff --cachedで次のコミットに入る内容を読み直してください。複数ファイルの変更がある場合は、追加するパスを個別に選べます。

新規ファイルや最初のコミットでは状態を見直す

まだHEADにない新規ファイルをaddした場合、ステージ解除するとファイル自体は作業ツリーに残り、通常は未追跡の??表示になります。追跡済みファイルの変更が Mになる例とは、表示が異なります。

一度もコミットしていないリポジトリにはHEADのコミットがないため、上の既定の復元元を使う手順は同じ条件で実行できません。まずコミットの有無と現在の状態を見てから操作を選んでください。ステージ解除は、コミット済みの履歴を書き換える操作でもありません。

参考資料

このブラウザからの自分のアクセスを解析から除外できます。