サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 74 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次
git

gitの戻しについて:git clean、git restore、git reset

tin
tin
2025-08-01 / 0 コメント / 0 いいね! / 6 読み / 1,333 文字

背景:

[ コミット履歴 ] ← HEAD

[ ステージ領域 ](インデックス)

[ 作業ツリー ](実際のファイル)

1.未追跡のファイル(untracked files)を削除

未追跡のファイルとは新規のものでgit管理されていないファイル

git clean -f → 未追跡ファイルをすべて削除します。
git clean -n → 削除される予定のファイル一覧だけ表示(安全) ※削除前に確認したい場合

▼より強力な使い方

コマンド 説明
git clean -f 未追跡の通常ファイルを削除
git clean -fd 未追跡のディレクトリも含めて削除
git clean -fx .gitignore で除外されたファイルも削除(危険)
git clean -nfd 実行前に削除対象を表示(安全確認)

2.作業ツリー(変更した)のファイルの戻し

git restore <ファイル名>
例:git restore main.cpp
git add 後(未コミット)では ステージに追加済み 、git restore実行するなら、作業ツリーのみ元に戻る(ステージは残る)。

▼git restoreとgit cleanの違い

コマンド 対象 動作 破壊的?
git restore main.cpp 追跡ファイル 最新コミットの状態に戻す(変更を破棄) ✅ はい(変更は消える)
git clean -f main.cpp 未追跡ファイル ファイル自体を削除する ✅ はい(ファイルごと消える)

※一番大きな違いは追跡なのか、未追跡なのか。

3.ステージ内のファイルを戻し

Gitで「ステージ内のファイルを削除」するには、つまり「git add でステージングされた状態から外す(アンステージする)」には、以下のようにします:
git restore --staged <ファイル名>
git reset <ファイル>

▼git resetでのステージ戻し

コマンド 意味 正しい?
git reset --mixed HEAD ステージをHEADに戻す(すべてのファイル)
git reset HEAD file1 file1 だけステージ解除
git reset --mixed HEAD file1 オプションとファイル指定の併用は不可

git resetgit reset --mixed HEADは同じです。

4.コミットを戻し

▼git resetでのコミット戻し

モード コマンド例 ステージ 作業ツリー 備考
--soft git reset --soft HEAD~1 ✅ 残る ✅ 残る 最新のコミットだけ取り消す(変更は残る)
--mixed(デフォルト) git reset HEAD~1 ❌ 取り消し ✅ 残る ステージも戻すが、ファイルは残る
--hard git reset --hard HEAD~1 ❌ 取り消し ❌ 消える すべて巻き戻し(完全に消える)⚠危険

▼質問:git reset HEADとgit reset HEAD^とgit reset HEAD~1の違い

コマンド 意味・対象 主な用途
git reset HEAD ステージ(インデックス)のみ git add を取り消したい時
git reset HEAD^ コミット1つ前に戻る 最新のコミットをなかったことに
git reset HEAD~1 コミット1つ前に戻る(^ と同じ) 同上(複数前に戻す時は ~n

▼git restoreとgit reset

したいこと 適切なコマンド
編集したファイルを最新コミットの状態に戻したい git restore ファイル名
git add したのを取り消したい git restore --staged ファイル名 または git reset ファイル名
間違ってコミットしたので、なかったことにしたい(内容は残す) git reset --soft HEAD~1
間違ってコミットしたのですべて取り消したい(変更も不要) git reset --hard HEAD~1

5.整理:

質問:①元ファイル⇒②編集した⇒③git add⇒④git commit⇒⑤再編集した git restore実行する場合、どの状態に戻ったか

①元ファイル
②編集した
③git add
④git commit
⑤再編集した →この時点で、作業ツリーと最新のコミットに差分がある状態。
✅ この時点で git restore main.cpp を実行した場合
main.cpp は、「直前のコミットの状態(④の内容)」に戻ります。
つまり、⑤の編集内容は破棄されて、④のコミット状態になる。

⑥git add
✅ この時点で git restore main.cpp を実行した場合
git restore main.cpp → 作業ツリーがコミット状態に戻るが、ステージの変更はそのまま残る
git restore --staged main.cpp → ステージの内容もコミットに戻す(git reset HEAD main.cpp に近い)

状態確認したい場合は:

git status
git diff
git diff --staged

0
git
  • 0

コメント欄