作業ツリーの変更を元に戻す / Git

作業ツリーの変更を元に戻す

 作業ツリーの変更を元に戻すにはcheckoutコマンドを使用します。ファイル名を指定するとそのファイルの変更を元に戻すことができます。

git checkout ファイル名

作業ツリーの変更をすべて元に戻す

 作業ツリーの変更をすべて元に戻すには.gitの存在するディレクトリでcheckoutの引数に .(ドット)を渡します。

git checkout .

 .(ドット)をcheckoutの引数に指定するとカレントディレクトリに含まれるすべてのサブディレクトリの変更を元に戻します。

 ですので、.gitのあるディレクトリでこのコマンドを実行すると作業ツリーで行った変更をすべて元に戻すことができます。カレントディレクトリに含まれるファイルだけの変更を行うのではないので注意してください。

特定のディレクトリ以下の変更を元に戻す

 特定のディレクトリ以下の変更を元に戻すにはckeckoutの引数にディレクトリ名を指定します。libというディレクトリ以下(サブディレクトリ含む)の変更を元に戻したい場合は以下のようにします。

git checkout lib

checkoutの注意点

新しく追加したファイルは削除されない

 checkoutは作業ツリーの変更を元に戻してくれますが、新しく追加したファイルを削除することはありません。ですのでディレクトリの状態をすべて復元するわけではありません。もし新しくファイルをディレクトリに作成しているとしたら、手作業でそのファイルを削除する必要があります。

checkoutのもうひとつの役割

 checkoutコマンドはもうひとつ役割があります。それはブランチを切り替えるという役割です。checkoutコマンドは、「作業ツリーの変更を戻す場合」と「ブランチを切り替える場合」に使用すると覚えておくとよいでしょう。

作業ツリーとは

 作業ツリーというGitの用語を使用していますので解説しておきます。作業ツリーとGitで管理されたあなたが作業しているディレクトリ(と含まれるファイル)のことをいいます。単純に現在存在しているディレクトリやファイルのことをさしていると思えばよいでしょう。

 作業ツリーはワーキングツリー、ワーキングコピーなどと呼ばれたりもします。

作業ツリーに加えた変更を元に戻すということの正確な理解

 Gitのバージョン管理の概念が理解できていないときは非常に混乱します。checkoutコマンドはローカルのリポジトリの情報を元にして作業ツリーを元の状態に戻すわけではありません。

 checkoutコマンドはインデックスの情報を元にして作業ツリーの内容を元に戻します。

+------------------+
|                  |
|ローカルリポジトリ|
|の最新のコミット  |  
|                  |
+------------------+
         |
+------------------+
|                  |
|インデックス      |  <--------+
|                  |           |
+------------------+           |
         |                     |------- checkoutはインデックスの情報を元に
+------------------+           |        して作業ツリーの変更を元に戻す。
|                  |           |
|作業ツリー        |  <--------+
|                  |
+------------------+

作業ツリーとインデックスの差分を確認する

 作業ツリーでの変更箇所のどの部分に変更を加えたかを知りたい場合があります。作業ツリーとインデックスの差分を確認するには、diffコマンドを使用します。

git diff

関連情報