Urobil som niekoľko zmien v súbore, ktorý bol niekoľkokrát odovzdaný ako súčasť skupiny súborov, ale teraz chcem zmeny v ňom vrátiť späť na predchádzajúcu verziu.
Urobil som git log
spolu s git diff
, aby som našiel revíziu, ktorú potrebujem, ale nemám žiadnu predstavu, ako dostať súbor späť do jeho predchádzajúceho stavu v minulosti.
git checkout -- foo
Tým sa foo
nastaví na HEAD. Môžete tiež:
git checkout HEAD^ foo
pre jednu revíziu späť atď.
Je zábavné, že git checkout foo
nebude fungovať, ak je pracovná kópia v adresári s názvom foo
; avšak git checkout HEAD foo
aj git checkout ./foo
budú fungovať:
$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo
Všimnite si však, že git checkout ./foo
a git checkout HEAD ./foo
nie sú presne to isté; príklad:
$ 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
(Druhé add
zaradí súbor do indexu, ale nezíska
odovzdaný.)
Git checkout ./foo
znamená vrátenie cesty ./foo
z indexu;
pridanie HEAD
dáva systému Git pokyn, aby vrátil túto cestu v indexe na jej
revízii HEAD
predtým, ako tak urobí.