C#でプログラミングをしていると、「ちょっと試作してみたコードが動かなくなったから、作業前の綺麗な状態に戻したい!」「間違って関係ないファイルまでステージングしてしまった!」という場面、日常茶飯事ですよね。
Subversion (SVN) 歴30年のエンジニアにとって、「作業の取り消し=右クリックして『Revert』」というのは身体に染み付いた反射神経のような操作でした。
ところが、Gitを触り始めたベテランがコンソールで思わず
git revert と打ってしまい、「あれっ!? 変なコミットが作られた!?」「作業中の変更が消えてない!?」と大混乱に陥るトラブルが後を絶ちません。本日は第10回として、「Gitにおけるローカル作業取り消しの新標準 git restore」を徹底解説します! SVNのRevertとの決定的な違い、ステージングの安全な解除、TortoiseGitでのGUI操作、そしてAIエージェント生成コードの即時ロールバックまで、現場で身を守る必須テクニックを完全網羅します!
① 導入・本日の達成目標
「元に戻す」という操作は、開発のスピードと心理的安心感を支える極めて重要なセーフティネットです。
しかしGitには「作業ツリー」「ステージ領域」「コミット履歴」という3つの階層があるため、「自分がどこにある変更を取り消したいのか」によって使うべきコマンドが明確に分かれています。
本日の講義でマスターするゴールは以下の3点です!
- 作業ツリーの変更破棄(
git restore <file>)とステージ解除(git restore --staged <file>)の使い分けを完全習得する。 - SVNの「Revert」とGitの「revert」「restore」「reset」の違いを正確に整理し、コマンド誤爆の恐怖をゼロにする。
- TortoiseGitのGUI操作およびAIエージェント(Antigravity / Claude Code等)の試作コードを安全に巻き戻す実務フローを身につける。
② 【全体像】3つの領域に応じた作業取り消しマップ
Gitの作業取り消しを迷わずに行う最大のコツは、Day 05で学んだ「3つの領域(作業ツリー・ステージ・リポジトリ)」と取り消しコマンドを対応づけて覚えることです。
上の図のように、作業の状態によって取り消しの種類は大きく3段階に分かれます:
古いGitの解説本やネット記事では git checkout -- <file> が頻出します。しかし checkout は「ブランチの切り替え」と「ファイルの取り消し」という全く異なる操作を1つのコマンドに詰め込んでいたため、誤爆事故が絶えませんでした。
そこでGit 2.23(2019年)以降、ブランチ切り替え専用の git switch と、ファイル取り消し専用の git restore に綺麗に分離されました。現代のGitでは、迷わず git restore を使いましょう!
③ 【罠を回避】SVNのRevert vs Gitのrevertの決定的違い
SVNを長年使い込んできたシニアエンジニアが最も遭遇しやすい罠が、この「Revertという単語の定義の違い」です。
この2つの違いを明確に意識してください:
・手元の作業コピーの変更を破棄する。
・中央リポジトリの最新リビジョンの状態にファイルを戻す(Undo操作)。
・履歴には何も残らない(単なるローカル変更の消去)。
・過去の特定のコミットを打ち消す「新しいコミット」を作成する。
・手元の未コミット変更を消すコマンドではない!
・SVNのRevertと同じことをしたい場合は git restore を使う。
作業ツリーに未コミットの変更が残っている状態で git revert <hash> を打つと、error: your local changes would be overwritten by revert というエラーでブロックされます。手元の変更を元に戻したいときは、絶対に git revert ではなく git restore を実行してください!
④ 【実践GUI】TortoiseGitでの「変更の取り消し(Revert)」画面とC#現場の注意点
「黒い画面のコマンドは慎重に使いたい」というWindowsエンジニアにとって、TortoiseGitのGUI操作は最も安心できる選択肢です。
TortoiseGitでは、SVNユーザーが違和感なく使えるようにメニュー名が「変更の取り消し (Revert...)」となっていますが、内部的には安全に git restore が実行されます:
- エクスプローラーでプロジェクトフォルダやC#ファイルを右クリックし、[TortoiseGit] → [変更の取り消し (Revert...)] を選択。
- 変更されたファイル一覧ダイアログが表示されるので、元に戻したいC#ファイルにチェックを入れる。
- [OK] をクリックすると、選択したファイルの変更が直前のコミット(HEAD)の状態に巻き戻る!
git restore やTortoiseGitのRevertで破棄した変更は、Windowsのゴミ箱にも入りません。完全に消滅します!
「いま試作したC#のLINQクエリ、動かないけど後で参考に見直すかもしれない…」と1ミリでも迷ったら、破棄する前に git stash(作業の一時退避)を行うか、git switch -c temp-backup で一時ブランチを作っておくのが一流エンジニアの安全運転マナーです。
⑤ 【AI協調開発】4大AIエージェントの試作コードを安全にロールバックする実践術
近年、Antigravity、Claude Code、Cursor、GitHub CopilotなどのAIエージェントにC#コードのリファクタリングや新機能実装を一括で依頼する開発スタイルが主流になりつつあります。
AIに大胆なコード生成を依頼した際、ビルドエラーが多発したり既存ロジックが壊れてしまったときは、以下の3ステップで瞬時に安全復元できます:
git status
git diff
# 2. 気に入らない場合、すべてのC#変更を一撃で破棄して試作前に完全復元
git restore .
# 3. AIが新規作成した不要ファイル(Untracked)もまとめて掃除する場合
git clean -fd
「いつでも git restore . で元に戻せる」という確信があるからこそ、AIエージェントに対して恐れずに大胆なリファクタリングを指示できるのです。Gitの作業取り消しは、AI協調開発時代の最強の防御壁と言えます。
⑥ 現場でよくある失敗・落とし穴(Q&A・トラブルシューティング)
Q1. git restore Program.cs を実行したのに、新規追加した Service.cs が消えません!
A1. git restore は「Gitがすでに追跡しているファイル(Tracked files)」のみが対象です。まだ一度もコミットやステージされていない新規ファイル(Untracked files)は、git clean -fd を実行するか、エクスプローラーから直接手動で削除してください。
Q2. git add . してステージした後に「やっぱり修正したい」ときはどうすればいい?
A2. git restore --staged . を実行してください。これでファイルがステージ領域から作業ツリーへ降ろされます。書いたC#コードは一切消えず、そのままエディタで再編集を続けられます。
Q3. ネットで「作業取り消しには git reset --hard HEAD が手っ取り早い」と見かけました。使ってもいいですか?
A3. 日常のローカル作業での reset --hard は極力避けましょう! 未ステージの変更もステージされた変更も、一切の確認なしに強制破棄されてしまいます。ファイルの指定ができる安全な git restore を習慣にしてください。
第10回の講義、お疲れ様でした!
「作業ツリーの変更破棄は git restore」「ステージ解除は git restore --staged」「SVNのRevertとGitのrevertの決定的違い」「TortoiseGitのGUI操作とAI試作コードの高速ロールバック」という、ローカルでの確実なセーフティネットを手に入れました!
コメント
コメントを投稿