ミスをなかったことに:restore、reset、revert ─ 正しい使い方と危険な落とし穴
面接でも実際の仕事でも最もよく求められるトピックの1つが、すでに行った変更の取り消し方です。このレクチャーでは、異なる「深さ」で変更を取り消す3つのツールを詳しく解説し、特に重要なポイントに焦点を当てます。reset --hardがチームワークを破壊してしまう具体的なシナリオや、その安全な代替手段であるrevertの活用法を紹介。良い解決策と悪い解決策を、実際の結果とともに検証します。
- 作業ディレクトリ、ステージングエリア、コミット履歴など、あらゆる段階での変更を自信を持って取り消せるようになります。
- resetとrevertの根本的な違いを理解し、どのような状況でどちらを使用すべきかが分かるようになります。
- チームで共有するリポジトリで変更を取り消す際に初心者が陥りがちなミスを避けられるようになります。
จุดเริ่มต้นของบทเรียน
Git restore: ファイルのための元に戻すボタン
- Git restore ― コミットされていない変更の取り消し
- エディタの『元に戻す』ボタンのような働き
- 安全 ― コミット履歴を変更しない
- ファイルを最後に保存された状態に戻す
誤ってファイルを保存してしまい、元の状態に戻したいと思ったことはありませんか? Git restoreは、まるで魔法の『元に戻す』ボタンのように、ファイルを最後にコミットされた状態に戻してくれます。他の取り消しコマンドと異なり、restoreはコミットされていない変更にのみ作用し、プロジェクトの履歴を一切変更しません。うっかりの編集を素早く元に戻したいときに、最初に試すべき安全なツールです。
ワーキングディレクトリの変更を元に戻す
- git restore file.txt ― ファイルを最後のコミットの状態に戻す
- ワーキングディレクトリのすべての変更を取り消す
- 安全 ― エディタで変更を元に戻せる
- 復元前にgit statusで状態を確認する
例えば、30分かけて設定ファイルを編集していたのに、方向性が間違っていることに気づいたとします。一つひとつ変更を手作業で元に戻す代わりに、git restore config.ymlと実行するだけで、ファイルは最後のコミットの状態に即座に戻ります。これは、ファイルを保存せずに閉じるようなものですが、確実に動作するバージョンに戻れるという保証があります。
# ファイルの復元デモ
$ echo "誤った変更" > main.py
$ git status
$ git restore main.py
$ cat main.py
$ git status
インデックスからファイルを削除する
- git restore --staged file.txt — ファイルをインデックスから削除
- ワーキングディレクトリの変更は保持される
- 注意: --staged を付けないと変更が失われる
- 実行前には必ず git status を確認する
よくあるミスの1つが、誤って余分なファイルをインデックスに追加してしまうことです。たとえば、git add . を実行した際に設定の一時ファイルを追加してしまったとします。git restore --staged コマンドにファイル名 settings.tmp を指定すると、インデックスから安全に削除でき、ワーキングディレクトリの変更は保持されます。--staged フラグを付けないと作業内容が失われてしまうため、restore を実行する前には必ず git status で状態を確認してください。これでコミット前の変更の取り消し方がわかりました。では、すでにコミットされてしまったミスはどうすればいいでしょうか? そこで役立つのが git reset です。
# 誤ってファイルをインデックスに追加した場合
$ git add config.tmp
$ git status
# 変更を保持したままインデックスから削除
$ git restore --staged config.tmp
$ git status
# ワーキングディレクトリにファイルが残っていることを確認
$ ls -la config.tmp
บทเรียนฉบับเต็มใช้ได้เมื่อสมัครสมาชิก
ฉบับเต็มมีสไลด์เพิ่มอีก 24 สไลด์
วิดีโอ สไลด์ทั้งหมด โน้ต แบบทดสอบ AI ติวเตอร์ และการสัมภาษณ์จะเปิดหลังเข้าสู่ระบบและสมัครสมาชิก
เข้าสู่ระบบหรือลงทะเบียน สมัครสมาชิกเนื้อหาบทเรียน
- Git restore: ファイルのための元に戻すボタン
- ワーキングディレクトリの変更を元に戻す
- インデックスからファイルを削除する
- Git reset: 履歴の巻き戻しの仕組み
- 安全な reset --soft: インデックスに変更を保持
- 標準的なreset --mixed: ワーキングディレクトリの変更
- 危険なreset --hard: 取り返しのつかない削除
- Reset: 3つのモード、1つのコマンド
- git reset --soft: 安全に履歴を書き換える
- --mixedと--hardを使うべきタイミング
- チェックリスト:どのresetを選ぶ?
- なぜ単に間違いを消せないのか?
- git revertの実践的な動作
- 複数のコミットを一度に取り消す
- リセット:ローカルでの履歴の書き換え
- リバート:安全に変更を元に戻す
- プッシュ時の挙動:リセット vs リバート
- reset --hard が危険な理由
- 変更を失う例
- データを復元する方法
- 共有ブランチでのリセットの危険性
- revertを使った安全な取り消し
- 正しい手順
- restore、reset、revertの使い分け
- 個人履歴と共有履歴の取り扱いルール
- ミス発生時のステップバイステップガイド
- まとめと課題: 変更のマスター
บทความเกี่ยวกับบทเรียนนี้
- คำสั่ง Git: ชีตสรุปพร้อมตัวอย่างสำหรับใช้ทุกวัน
- git checkout, switch และ restore: ควรใช้อะไรเมื่อไร
- git reset กับ git revert: วิธียกเลิกคอมมิตโดยไม่ทำลายประวัติของทีม
- git reflog: วิธีกู้คอมมิตและบรานช์ที่หายไป
- Git และ GitHub: ต่างกันอย่างไร และเชื่อมโยงกันอย่างไร
บทเรียนทั้งหมดในคอร์สนี้
- はじめに:ゼロから始めるGit - 自信を持って使える開発者を目指して
- Gitはなぜ必要なのか?~採用で求められるスキル~
- インストールとセットアップ:Gitの初回起動準備
- 最初のリポジトリ: init、add、commit、そしてインデックスの魔法
- Git履歴の読み方: log, diff, showと過去の履歴を辿る
- ブランチ: コードの並行現実
- ミスをなかったことに:restore、reset、revert ─ 正しい使い方と危険な落とし穴
- GitHubとリモートリポジトリ: クラウドでのコード管理
- チームワーク:フォーク、フィーチャーブランチ、プルリクエスト
- マージコンフリクト:慌てずに理解して解決する
- 実践的なチーム開発におけるGitワークフロー:最適な選択方法
- 上級者向けツール:rebase、stash、cherry-pick、タグ
- 最終プロジェクト:実際のチーム開発をシミュレートする