Hoe kan ik een bestand terugzetten of terugdraaien naar een specifieke revisie?

Ik heb enkele wijzigingen aangebracht in een bestand dat al een paar keer is vastgelegd als onderdeel van een groep bestanden, maar nu wil ik de wijzigingen terugzetten naar een eerdere versie.

Ik heb een git log gedaan samen met een git diff om de revisie te vinden die ik nodig heb, maar ik heb geen idee hoe ik het bestand terug kan krijgen naar zijn vorige staat.

git checkout -- foo

Dat zal foo terugzetten naar HEAD. Je kunt ook:

git checkout HEAD^ foo

voor één revisie terug, etc.

Commentaren (4)

Grappig genoeg zal git checkout foo niet werken als de werkkopie in een map met de naam foo staat; maar zowel git checkout HEAD foo als git checkout ./foo wel:

$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D   foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo
Commentaren (1)

Merk echter op dat git checkout ./foo en git checkout HEAD ./foo niet precies hetzelfde zijn; voorbeeld:

$ 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

(De tweede add plaatst het bestand in de index, maar het wordt niet vastgelegd).

Git checkout ./foo betekent terugzetten pad ./foo uit de index; Het toevoegen van HEAD instrueert Git om dat pad in de index terug te zetten naar de HEAD revisie terug te zetten voordat je dat doet.

Commentaren (0)