【Git実践】git restoreで”なかったことに”する|取り消し・元に戻す使い方
Git学習アプリ連載 第6章・第7章「変更の取り消しと.gitignore」
—
git restoreの使い方・取り消し方法を知りたいのに、調べるほど混乱していませんか?
「`git checkout`と`git reset`と`git restore`、何が違うの?」
「ファイルを戻したいだけなのに、コマンドが多すぎてどれを使えばいいかわからない」
これ、Gitを使い始めた人がほぼ全員つまずくポイントです。私も最初は`git reset –hard`を使ってしまい、取り消したくないコミットまで消えてしまった苦い経験があります。
この記事では、git restore 使い方 取り消しの基本を整理し、「あ、これ使えばよかっただけか」と思えるくらいシンプルに解説します。
—
git restoreで取り消せる2パターン
git restoreは、ファイルの変更をなかったことにするコマンドです。使い方は大きく2パターンあります。
パターン1:作業ディレクトリの変更を取り消す
git restore index.html
編集したけど「やっぱりやめよう」と思ったとき。ファイルの内容が最後にコミットした状態に戻ります。
注意:この操作は元に戻せません。 未保存の変更は消えます。
パターン2:ステージング(add済み)を取り消す
git restore --staged index.html
`git add`してしまったけど、コミットに含めたくないと気づいたとき。ファイルの変更内容は残ったまま、addだけ取り消せます。
この2つだけ覚えておけば、日常のGit作業の「あ、やり直したい」はほぼ対応できます。
—
なぜgit restoreが生まれたのか
Git 2.23(2019年リリース)より前は、ファイルの取り消しに`git checkout —
しかしこの`git checkout`、実はブランチの切り替えにも使うコマンドです。「ファイルの取り消し」と「ブランチ移動」が同じコマンドというのは、初心者には非常にわかりにくい。
そこでGitは役割を分離しました。
- **git restore** → ファイルの内容を戻す(ブランチは動かない)
- **git switch** → ブランチの切り替え
`git reset`との違いも整理しておきます。`git reset`はブランチのHEADポインタを動かすコマンドです。コミット履歴ごと戻したいときに使います。`git restore`はコミット履歴に影響せず、ファイルの中身だけを変えます。
迷ったら「ファイルを戻したい → `git restore`」「コミット履歴を変えたい → `git reset`」と覚えておいてください。
—
実際にやってみた:よくある場面3つ
場面1:ファイルを間違えて編集してしまった
CSSを修正しようとして、間違えてJSファイルを変更してしまった。`git restore`で一発解決。
git restore app.js
実行後、`git status`で確認すると変更がきれいに消えています。
場面2:addしすぎた
「よし、コミットしよう」と全ファイルをaddしたら、テスト用の一時ファイルも入っていた。
git restore --staged temp_test.txt
これでステージングからだけ外せます。ファイルの変更内容(中身)は消えないので安心です。
場面3:全部リセットしたい
実験的な変更を全部捨てたいとき。
git restore .
カレントディレクトリ配下の変更をまとめて取り消します。操作は元に戻せないので慎重に。
—
読者向けプロンプト:Claude Codeに相談してみよう
git restoreを使う場面に迷ったとき、Claude Codeに確認を取る習慣が助けになります。
以下のプロンプトをそのまま貼り付けて使ってください。
今、Gitで以下の状況になっています。
- [状況を具体的に説明する]
- 例:「index.htmlを編集したがaddはしていない。元の状態に戻したい」
- 例:「3つのファイルをaddしたが、うち1つだけ取り消したい」
不明点は推測せず、確認事項として列挙してください。
私のGit環境に影響する操作を実行する前に、必ず内容を説明してください。
このプロンプトに「安全句」を入れているのがポイントです。「確認事項として列挙してください」「実行前に説明してください」があると、AIが勝手に取り消し操作を実行するのを防げます。
—
.gitignoreで”最初から追跡しない”設定
git restoreは「すでに追跡しているファイルの変更を取り消す」コマンドです。
でも「そもそもGitに追跡させたくないファイル」がありますよね。`.env`ファイル(APIキーが入っている)、`node_modules/`(巨大なライブラリフォルダ)、個人の設定ファイルなど。
これを管理するのが`.gitignore`です。
.gitignoreの作り方
リポジトリのルートディレクトリに`.gitignore`ファイルを作り、除外したいファイルやフォルダを1行ずつ書くだけです。
# APIキー・環境変数
.env
# ライブラリ
node_modules/
# ログファイル
*.log
# macOSのシステムファイル
.DS_Store
すでにaddしてしまったファイルは?
.gitignoreに書いても、すでにGitが追跡しているファイルには効きません。
過去に`git add`してコミット済みのファイルを除外したいときは、追跡から外す操作が必要です。
git rm --cached .env
これでGitの追跡対象から外れます(ファイル自体はローカルに残ります)。その後`.gitignore`に`.env`を追加してコミットすれば、以後は無視されます。
テンプレートを活用する
毎回一から書く必要はありません。GitHubが言語・フレームワーク別の公式テンプレートを提供しています。また「gitignore.io」というサービスでは、使用技術を選ぶと自動生成してくれます。
—
まとめ:今日から使えるgit restore
この章で学んだポイントをまとめます。
- `git restore
` → 作業ディレクトリの変更を取り消す(元に戻せない) - `git restore –staged
` → addを取り消す(ファイルの変更内容は残る) - `git restore .` → 全ファイルの変更をまとめて取り消す
- `git reset`との違い:restoreはファイルの中身だけ、resetはコミット履歴も変える
- `.gitignore` → 追跡させたくないファイルを最初から除外する設定
「間違えても取り消せる」という安心感があると、Gitへの心理的ハードルが下がります。restoreと.gitignoreを使いこなすと、実験的な変更を気軽に試せるようになります。
—
このトピックをアプリで試す
この記事で扱ったgit restoreと.gitignoreは、Git学習アプリの第6章・第7章で実際に操作しながら学べます。
コマンドを読むだけより、実際に手を動かすほうが定着します。ぜひアプリで試してみてください。
—
*Git学習アプリ連載 第6章「変更の取り消し(git restore)」・第7章「.gitignoreの設定」*