Bir dosyayı belirli bir revizyona nasıl sıfırlayabilir veya geri döndürebilirim?

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.

Yorumlar (4)

İ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
Yorumlar (1)

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 önceHEAD` revizyonu.

Yorumlar (0)