ファイルグループの一部として何度かコミットされたファイルに変更を加えましたが、そのファイルの変更を以前のバージョンにリセット/戻したいと思います。
必要なリビジョンを見つけるために、git log
とgit diff
を行いましたが、ファイルを過去の元の状態に戻す方法がわかりません。
git checkout -- foo
これで foo
が HEAD にリセットされます。また、以下のこともできます。
git checkout HEAD^ foo
は1つ前のリビジョン、など。
面白いことに、作業コピーが foo
という名前のディレクトリにある場合、git checkout foo
は動作しません。しかし、git checkout HEAD foo
と git checkout ./foo
は動作します。
$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo
ただし、git checkout ./foo
と git checkout HEAD ./foo
は 正確 には同じものではないことに注意してください。
は 正確 には同じものではありません; 例を挙げると
$ echo A > foo
$ git add foo
$ git commit -m 'A' foo
Created commit a1f085f: A
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
$ echo B >> foo
$ git add foo
$ echo C >> foo
$ cat foo
A
B
C
$ git checkout ./foo
$ cat foo
A
B
$ git checkout HEAD ./foo
$ cat foo
A
(2回目の add
はファイルをインデックスにステージングしますが、それは not になります。
コミットされません)
Git checkout ./foo
は、パス ./foo
を index から戻すことを意味します。
HEADを追加すると、Git にインデックスのそのパスを
HEADリビジョンに戻すように指示します。 HEAD
を追加すると、Git はインデックスのそのパスをそのリビジョンに戻すように指示します。