2009-07-23 14 views
75

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

znalazłem this mail on the mailing list, który powiedział:

$ git checkout HEAD~43 Makefile 
$ git reset Makefile 

Ale ja nie rozumiem, w jaki sposób dowiedzieć się, „HEAD ~ 43”, jeśli zrobię git log aFile, w jaki sposób mogę się dowiedzieć, który „HEAD ~ 43 "Powinienem użyć?

I dlaczego muszę uruchomić git reset dla tego pliku? Co to robi?

+0

"git zresetować " robi dokładnie to samo co "git checkout ". –

+2

Jeśli twoje pytanie dotyczy składni HEAD ~ 43 (udokumentowanej w git-rev-parse), zapytaj o ten problem, a nie o niezwiązany, na który znasz odpowiedź. "Co oznacza HEAD ~ 45 i jak znaleźć konkretną wersję pliku" –

+0

zgodnie z http://www.lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- checkout.html i http://www.lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-reset.html, "git reset " nie robi dokładnie tak samo jak „git checkout ”: «git zresetować » powraca w indeksie od bez dotykania w drzewie roboczej, ale «git checkout » aktualizuje indeks z a następnie aktualizowanie w pracy drzewo. – yoda

Odpowiedz

94

Wiesz, jakie zatwierdzenie (np. Konkretna rewizja) do pliku należy? Następnie wykonaj:

git checkout <commit> <file> 

The inną komendę:

git checkout HEAD~N <file> 

Czy gdy chcesz uzyskać wersję pliku z zakresu back (które robię dla nostalgii).

+0

To powinna być zaakceptowana odpowiedź. – TinkerTenorSoftwareGuy

2

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

15

HEAD~43 jest po prostu drzewiasta, więc można użyć skrótu lub znacznika. Musisz oddzielić treeish od nazwy pliku z --, w przeciwnym razie jest traktowane jako nazwa pliku. Na przykład.

git checkout v0.45 -- filename 
git checkout HEAD^ -- filename 
git checkout 16bb1a4eeaa9 -- filename 
Powiązane problemy