Bir dosya grubunun parçası olarak birkaç kez işlenmiş bir dosyada bazı değişiklikler yaptım, ancak şimdi dosyadaki değişiklikleri önceki bir sürüme sıfırlamak/geri almak istiyorum.
İhtiyacım olan revizyonu bulmak için bir git log
ile birlikte bir git diff
yaptım, ancak dosyayı geçmişteki eski durumuna nasıl geri getireceğim konusunda hiçbir fikrim yok.
git checkout -- foo
Bu foo
yu HEAD olarak sıfırlayacaktır. Ayrıca şunları da yapabilirsiniz:
git checkout HEAD^ foo
bir geri revizyon için, vb.
İlginçtir ki, git checkout foo
çalışma kopyası foo
adlı bir dizindeyse çalışmaz; ancak hem git checkout HEAD foo
hem de git checkout ./foo
çalışır:
$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo
Bununla birlikte, git checkout ./foo
ve git checkout HEAD ./foo
tam olarak** aynı şey değildir; örnek olarak:
$ 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
(İkinci add
dizindeki dosyayı aşamalandırır, ancak almaz
kararlı.)
Git checkout ./foo
, index'ten ./foo
yolunu geri döndürmek anlamına gelir;
HEADeklenmesi Git'e dizindeki bu yolu kendi dizinine geri döndürmesi talimatını verir. Bunu yapmadan önce
HEAD` revizyonu.