HOWTO · Git

Git で単一ファイルへのローカル変更を元に戻す

Git で単一のファイルをリセットするさまざまな方法。

この記事では、git checkoutgit reset などのコマンドを使用して、ファイルを好みのバージョンにロールバックする方法について説明します。Git を使用すると、ファイルやリポジトリを簡単にリセットできますが、Git の変更を元に戻すという概念は、想像以上に複雑です。

リポジトリで変更を元に戻すことは、ローカルで作業している一連のファイルへの変更を元に戻すこととは異なります。

git checkoutgit reset、および git restore コマンドは、ファイルを以前のバージョンにロールバックするときに便利です。しかし、これらのコマンドに飛び込む前に、私たちは自分自身に問いかけなければなりません。ファイルのリセットとはどういう意味ですか?

ファイルのリセットは、状況によって異なる場合があることに注意してください。git checkout コマンドが期待と一致しない場合があります。

すでにコミットされた変更をロールバックしたい人と、ファイルがリポジトリと同期するように変更を元に戻したい人では異なります。

違いを理解するために注意すべきいくつかの用語があります。

  1. 作業ツリー
  2. ステージングエリア
  3. リポジトリ

Git でコミット済みのファイルをロールバックする

一般的なケースは、ファイルをコミットし、変更を元に戻したい場合です。このようなシナリオでは、git checkout コマンドを使用します。

以前はコマンドを使用してブランチを切り替えましたが、それはそれが実行できることの一部にすぎません。

このコマンドを使用して、すでにコミットしたファイルへの変更を元に戻すことができます。作業ツリー内のファイルは、リポジトリの履歴の任意の時点のファイルと一致します。

ブランチ、タグ、コミットを指定できます。

以下は、コマンドを実行するための最良の方法です。

$ git checkout [commit ID] -- path/to/file

上記のコマンドを実行するとき、Git がリポジトリ内の特定のコミット ID を指すようにします。さらに、単一のファイルへのパスを追加しました。

上記のコマンドを実行すると、作業ツリー内のファイルのみが更新されます。ファイルをステージングして、新たにコミットする必要があります。

Git でステージングされたファイルとステージングされていないファイルへの変更を元に戻す

ステージング領域には、コミットするファイルが含まれています。ステージングされたファイルの変更を元に戻すには、git reset コマンドを実行してステージングを解除します。

$ git reset HEAD path/to/file

以下のコマンドを実行して、ファイルをステージングする前にローカルの変更を元に戻します。

$ git checkout -- path/to/file

このコマンドは、コミット ID が省略されていることを除けば、最初のコマンドと似ています。

git restore コマンド

新しいバージョンの Git では、git restore コマンドを使用して単一のファイルへの変更を元に戻すことができます。

コマンドを使用する方法のいくつかを次に示します。

  1. リポジトリへの変更を元に戻します

    $ git restore --source [commit id] path/to/file
    
  1. ファイルのステージングを解除します

    $ git restore --staged path/to/file
    
  2. 作業コピーへの変更を元に戻します

    $ git restore path/to/file
    

単一のファイルをリセットするのではなく、コミットをロールバックすることがよくあります。ただし、必要な場合は、かなり簡単です。