変更の取り消し・ロールバック

「変更の取り消し・ロールバック」はGitを使う上で非常に重要な操作の一つです。以下に、Gitにおける代表的な「変更の取り消し・ロールバック」操作について詳しく説明します。


1. 作業ディレクトリの変更を取り消す(未ステージの変更)

git restore <ファイル名>

  • 用途:作業ディレクトリでの変更を元に戻す(最新のコミット状態に戻す)。

  • bash
    git restore index.html
  • 注意:ステージング前の変更に対して有効。ステージング済みの内容はこの方法では戻せません。


2. ステージング済みの変更を取り消す

git restore --staged <ファイル名>

  • 用途git addでステージングした変更を取り消し、作業ディレクトリに戻す。

  • bash
    git restore --staged index.html

3. 直前のコミットを取り消す

git reset --soft HEAD~1

  • 用途:直前のコミットを取り消し、変更はステージング状態に戻る。

  • bash
    git reset --soft HEAD~1

git reset --mixed HEAD~1

  • 用途:直前のコミットを取り消し、変更はステージングから外れて作業ディレクトリに残る。

  • bash
    git reset --mixed HEAD~1

git reset --hard HEAD~1

  • 用途:直前のコミットと変更内容そのものを完全に取り消す(復元不可能)。

  • bash
    git reset --hard HEAD~1
  • 警告--hard変更内容が完全に失われるため、十分に注意して使用してください。


4. 特定のファイルだけをロールバックする(ステージ・コミット問わず)

git checkout <コミットID> -- <ファイル名>(古い方法)

git restore --source <コミットID> <ファイル名>(推奨)

  • 用途:特定のファイルを過去のコミット状態に戻す。

  • bash
    git restore --source HEAD~2 index.html

5. すでに共有したコミットを取り消す(履歴を書き換える)

git revert <コミットID>

  • 用途:既存のコミットを「打ち消す」ための新しいコミットを作成する。

  • bash
    git revert abc1234
  • 特徴

    • 安全に履歴を保ったままロールバックできる。

    • チームで共有済みのリモートリポジトリで作業する際に推奨される方法。


補足:どれを使えばよいかの判断基準

状況 推奨コマンド
ステージ前の変更を取り消したい git restore <ファイル名>
ステージングを取り消したい git restore --staged <ファイル名>
ローカルの直前コミットを取り消したい git reset --soft/mixed/hard HEAD~1
リモートにpush済みのコミットを取り消したい git revert <コミットID>

生成日:2025/06/09