Jak mogę pobrać konkretną wersję jednego pliku w Git?

87

Jak mogę sprawdzić konkretną wersję jednego pliku w git?

Znalazłem tę wiadomość na liście mailingowej , na której było napisane:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Ale nie rozumiem, jak znaleźć „HEAD ~ 43”, a jeśli zrobię git log aFile, jak mogę się dowiedzieć, którego „HEAD ~ 43” powinienem użyć?

Dlaczego muszę uruchomić git resetten plik? Co to robi?

n179911
źródło
„git reset <commit> <file>” robi dokładnie to samo, co „git checkout <commit> <file>”.
Jakub Narębski
2
Jeśli twoje pytanie dotyczy składni HEAD ~ 43 (udokumentowanej w git-rev-parse), zapytaj o ten problem, a nie o niepowiązany, na który znasz odpowiedź. „Co oznacza HEAD ~ 45 i jak znaleźć konkretną wersję pliku”
Jakub Narębski
zgodnie z lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/… i lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" nie działa dokładnie tak samo jak "git checkout <commit> <file>": "git reset <commit> <file>" przywraca <file> w indeksie from <commit> bez dotykania <file> w drzewie roboczym, ale „git checkout <commit> <file>” aktualizuje indeks dla <file> z <commit>, a następnie aktualizuje <file> w drzewie roboczym.
yoda
2
Jeśli którakolwiek z poniższych odpowiedzi odpowiedziała na Twoje pytanie, czyli sposób, w jaki działa Stack Overflow, „zaakceptowałbyś” odpowiedź, klikając znacznik wyboru obok niej; szczegóły tutaj . Ale tylko wtedy, gdy odpowiesz na twoje pytanie; jeśli nie, rozważ dodanie więcej szczegółów do pytania i / lub komentarzy do odpowiedzi, mówiąc, co nie jest jasne (jeszcze).
TJ Crowder

Odpowiedzi:

104

Wiesz, do jakiego zatwierdzenia (tj. Konkretnej wersji) należy plik? Następnie wykonaj:

git checkout <commit> <file>

Drugie polecenie:

git checkout HEAD~N <file>

Jest dla sytuacji, gdy chcesz odzyskać wersję pliku z określonego zakresu (co robię z nostalgią).

Fałszywy kod Monkey Rashid
źródło
19

HEAD~43jest po prostu drzewiasta, więc możesz użyć skrótu lub tagu. Musisz oddzielić drzewiaste od nazwy pliku za pomocą --, w przeciwnym razie jest to traktowane jako nazwa pliku. Na przykład.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename
dhill
źródło
2

HEAD~43odnosi się do zatwierdzenia (wersji) pliku. Zamiast tego możesz użyć skrótu zatwierdzenia, który uzyskasz podczas wykonywania git logna pliku. Jeśli chcesz tylko plik, nie musisz na nim uruchamiać git reset; jest to konieczne tylko wtedy, gdy chcesz przekierować plik do bieżącego HEAD.

Jim Puls
źródło