スキップしてメイン コンテンツに移動

【Day 10】ローカルでの作業取り消し(restore / reset基本)

Git & GitHub 超入門 Day 10
👨‍🏫
皆さん、こんにちは! 本講座の専任講師です。
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つの領域(作業ツリー・ステージ・リポジトリ)」と取り消しコマンドを対応づけて覚えることです。

Gitの3つの領域に応じた取り消しコマンドマップ
▲ 【図解①】作業ツリー・ステージ・リポジトリに応じた安全な取り消しコマンドマップ

上の図のように、作業の状態によって取り消しの種類は大きく3段階に分かれます:

対象の状態 推奨コマンド(Git 2.23+) 旧来のコマンド(非推奨) ファイル内容への影響
① 作業ツリーの未ステージ変更 git restore <file> git checkout -- <file> 【完全破棄】 未保存の編集内容は元に戻せません
② ステージング済みの変更 git restore --staged <file> git reset HEAD <file> 【安全】 ステージから降ろすだけで、書いたコードは消えません
③ コミット済みの過去履歴 git revert <commit> git reset --hard(危険) 打ち消しコミットを作成(Day 11で詳解)
💡 なぜ昔の git checkout ではなく git restore なのか?

古いGitの解説本やネット記事では git checkout -- <file> が頻出します。しかし checkout は「ブランチの切り替え」と「ファイルの取り消し」という全く異なる操作を1つのコマンドに詰め込んでいたため、誤爆事故が絶えませんでした。
そこでGit 2.23(2019年)以降、ブランチ切り替え専用の git switch と、ファイル取り消し専用の git restore に綺麗に分離されました。現代のGitでは、迷わず git restore を使いましょう!

③ 【罠を回避】SVNのRevert vs Gitのrevertの決定的違い

SVNを長年使い込んできたシニアエンジニアが最も遭遇しやすい罠が、この「Revertという単語の定義の違い」です。

SVNのRevert vs Gitのrestore/reset/revertの決定的違い
▲ 【図解②】SVNのRevert vs Gitのrestore / reset / revertの決定的違い

この2つの違いを明確に意識してください:

SVNの「Revert」

・手元の作業コピーの変更を破棄する。
・中央リポジトリの最新リビジョンの状態にファイルを戻す(Undo操作)。
・履歴には何も残らない(単なるローカル変更の消去)。

Gitの「git revert」

・過去の特定のコミットを打ち消す「新しいコミット」を作成する。
・手元の未コミット変更を消すコマンドではない!
・SVNのRevertと同じことをしたい場合は git restore を使う。

⚠️ 現場の悲劇: 未コミット変更がある状態で git revert を打つと?

作業ツリーに未コミットの変更が残っている状態で git revert <hash> を打つと、error: your local changes would be overwritten by revert というエラーでブロックされます。手元の変更を元に戻したいときは、絶対に git revert ではなく git restore を実行してください!

④ 【実践GUI】TortoiseGitでの「変更の取り消し(Revert)」画面とC#現場の注意点

「黒い画面のコマンドは慎重に使いたい」というWindowsエンジニアにとって、TortoiseGitのGUI操作は最も安心できる選択肢です。

TortoiseGit 変更の取り消し画面
▲ 【図解③】TortoiseGit『変更の取り消し(Revert)』による直感的な破棄操作

TortoiseGitでは、SVNユーザーが違和感なく使えるようにメニュー名が「変更の取り消し (Revert...)」となっていますが、内部的には安全に git restore が実行されます:

  1. エクスプローラーでプロジェクトフォルダやC#ファイルを右クリックし、[TortoiseGit] → [変更の取り消し (Revert...)] を選択。
  2. 変更されたファイル一覧ダイアログが表示されるので、元に戻したいC#ファイルにチェックを入れる。
  3. [OK] をクリックすると、選択したファイルの変更が直前のコミット(HEAD)の状態に巻き戻る!
💡 C#開発現場のセーフティルール: 取り消す前に stash かブランチ!

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エージェントの試作コードを安全にロールバック
▲ 【図解④】AIエージェントの試作コードを安全に破棄・復元する開発サイクル

AIに大胆なコード生成を依頼した際、ビルドエラーが多発したり既存ロジックが壊れてしまったときは、以下の3ステップで瞬時に安全復元できます:

# 1. AIが変更したファイル一覧と差分を瞬時に確認
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試作コードの高速ロールバック」という、ローカルでの確実なセーフティネットを手に入れました!

次回【Day 11】は、「過去のコミット履歴を安全に打ち消す(revert)〜チーム開発で歴史を改変せずにバグを巻き戻す技術〜」をお届けします。すでに共有してしまったコミットの安全な取り消し術をマスターしましょう!

コメント

このブログの人気の投稿

【Perfume】Perfume 3rd Tour 「JPN」さいたまスーパーアリーナに行って参りました~

Perfume 3rd Tour 「JPN」1月28日、29日の2daysで参戦して参りました。 ファンクラブ会員の選考抽選会に28日、29日の両日で申し込んでいたんですが、両方とも当選していたという嬉しい誤算。 仕事だぁ、なんだかんだと紆余曲折ありまして28日の参戦は危ぶまれていたのですが、なんとかかんとか28日は40分遅刻しながらも参戦、29日はフル参戦する事が出来ました(∩´∀`)∩

Perfume、2025年末で“コールドスリープ(活動休止)”へ──東京ドーム2daysの記録と、公式・各界・ファンの声

  1) 公式発表・基本情報 活動休止(コールドスリープ)を正式発表 2025年9月21日、公式サイト「 Perfumeより 」で、2026年から一度コールドスリープに入ると発表。再始動の意思(“新しいPerfume”として戻る)も明記。 Perfume Official Site 今後の運用告知(配信・上映など) 同21日付の「 今後のPerfumeに関して 」で、9/23(火・祝)東京ドーム公演の LIVESHIP全世界生配信 および 全国ディレイビューイング 決定を案内。特設サイトも併記。 Perfume Official Site +1 公式グッズ **「Perfume Calendar 2026」**発売決定(B2壁掛け/表紙+2カ月1枚×6枚+ポスター)。テーマは“フルーツ”。 Perfume Official Site 2) 東京ドーム2days(9/22・23)要点 公演タイトル: ZO/Z5 Anniversary “ネビュラロマンス” Episode TOKYO DOME 。日程・開場/開演・会場・物販等の実務情報は特設で公開。 Perfume Official Site 9/23公演を世界配信(LIVESHIP) /ディレイビューイング実施。 Perfume Official Site 海外向け報道(英語)も「 indefinite hiatus 」として広く配信。 The Times of India 国内英字メディアも速報。 朝日新聞 3) 現地レポ( メリ爺 )から見える空気 あなたの現地記録(9/24公開)を、ファクトと現場情景の両面で反映: 両日参戦 。22日は アリーナ 、23日は 1階席から俯瞰 。前日の発表を受け、開演前のザワつき→MC後に“いつもの一体感”へ。開演は22日 18:45 頃。オープニングは**P³ツアー東京ドーム(2020/2)**と同趣向で“回収”の演出。 メリ爺のゲーム万歳 MC所感 :解散ではなく前向きな休止で不安を和らげる内容。 かしゆか の涙、 のっち の気丈さ、 あ〜ちゃん の思い出語り──3人の結束と「 また戻る 」約束が強く刻まれた。 メリ爺のゲーム万歳 体感時間 : “3時間弱”級のボリューム ながら“過去一...

ニンテンドースイッチでオンラインゲームを遊ぶには?

モンスターハンターライズが発売になって、家族でモンハン楽しみたい人が増えたみたいですね。 某ブログの検索キーワードを調べると、モンハンを家族でやるにはどうしたらいいのか?を調べている人が沢山いるのがわかります。 ※これでも一部  家族で協力するにはSwitch2台、ソフトも2つ購入する必要があります。 1台のスイッチでは遊べませんし、ソフト1つでも遊べません。 でも、1台のスイッチで別々アカウントがあれば交代で遊ぶこともできますよ。セーブデータもしっかり分かれます。 Switchのオンラインゲームを家族で遊ぶ方法については以下の記事にまとめてますのでよろしければ参考にしてみてくださいね。 家族でモンスターハンターライズDL版のオンラインプレーを楽しむ方法