Usunąłem plik za pomocą Git, a następnie zatwierdziłem, więc plik nie jest już w mojej kopii roboczej. Chcę przejrzeć zawartość tego pliku, ale nie chcę go przywrócić. W jaki sposób mogę to zrobić?
Usunąłem plik za pomocą Git, a następnie zatwierdziłem, więc plik nie jest już w mojej kopii roboczej. Chcę przejrzeć zawartość tego pliku, ale nie chcę go przywrócić. W jaki sposób mogę to zrobić?
Odpowiedzi:
git show HEAD^:path/to/file
Możesz użyć jawnego identyfikatora zatwierdzenia lub HEAD~nzobaczyć starsze wersje lub jeśli było więcej niż jedno zatwierdzenie od czasu jego usunięcia.
fatal: Invalid object name 'HEAD^'.(muszę wspomnieć, że mam tylko "wstępne zatwierdzenie")
Jeśli jest to plik, który usunąłeś jakiś czas temu i nie chcesz szukać wersji , możesz użyć (nazwa pliku foow tym przykładzie; możesz użyć pełnej ścieżki):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
Te rev-listspojrzenia inwokacji dla wszystkich korekt fooale tylko jeden list. Ponieważ rev-listlisty są w odwrotnym porządku chronologicznym, to jest to ostatnia zmiana, która uległa zmianie foo, czyli zatwierdzenie, które zostało usunięte foo. (Opiera się to na założeniu, że git nie pozwala na zmianę usuniętego pliku, a mimo to pozostaje usunięty.) Nie możesz po prostu użyć wersji, która rev-listzwraca taką, jaka jest, ponieważ foojuż tam nie istnieje. Trzeba poprosić o jeden tuż przed nią, która zawiera ostatnią wersję pliku, stąd ^in git show.
**/foojeśli nie znasz ścieżki (zadziała to dla polecenia rev-list, ale nie dla polecenia show. Jednak za pomocą zatwierdzenia z polecenia rev-list możesz znaleźć ścieżkę).
Ponieważ możesz nie przypomnieć sobie dokładnej ścieżki, możesz zamiast tego pobrać sha1 z dziennika git, a następnie możesz po prostu wydać
git cat-file -p <sha1>
git whatchanged --no-abbrevdaje wynik podobny do dziennika git (lub svn).
path/to/filejest to pełna ścieżka od góry projektu (górny katalog repozytorium).