Czy w Git jest polecenie, aby zobaczyć (zrzuconą na standardowe wyjście lub w $PAGERlub $EDITOR) określoną wersję określonego pliku?
git checkout <sha1-of-the-commit-you-need>późniejgit checkout HEAD
Czy w Git jest polecenie, aby zobaczyć (zrzuconą na standardowe wyjście lub w $PAGERlub $EDITOR) określoną wersję określonego pliku?
git checkout <sha1-of-the-commit-you-need>późniejgit checkout HEAD
Odpowiedzi:
Możesz użyć git showścieżki z katalogu głównego repozytorium ( ./lub ../względnej ścieżki ):
$ git show REVISION:path/to/file
Zastąp REVISIONaktualną wersją (może to być SHA zatwierdzenia Git, nazwa znacznika, nazwa gałęzi, względna nazwa zatwierdzenia lub inny sposób identyfikacji zatwierdzenia w Git)
Na przykład, aby wyświetlić wersję pliku <repository-root>/src/main.csprzed 4 zatwierdzeń, użyj:
$ git show HEAD~4:src/main.c
Git dla Windows wymaga ukośników nawet w ścieżkach względem bieżącego katalogu. Aby uzyskać więcej informacji, sprawdź stronę podręcznika dla git-show.
Wykonanie tego według daty wygląda następująco:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Zauważ, że HEAD@{2013-02-25}oznacza to „gdzie HEAD był w dniu 25.02.2013” w tym repozytorium (używając reflog ), a nie „ostatni zatwierdzenie przed 25.02.2013 w tej gałęzi w historii”.
masterzamiast HEAD@{2013-02-25}, jeśli jesteś na gałęzi
git log --since='2016-04-28 23:59:59 +0100'?
Jeśli lubisz GUI, możesz użyć gitk:
uruchom gitk za pomocą:
gitk /path/to/file
Wybierz wersję w górnej części ekranu, np. Według opisu lub daty. Domyślnie dolna część ekranu pokazuje różnicę dla tej wersji (odpowiadająca przyciskowi opcji „łatka”).
Aby zobaczyć plik dla wybranej wersji:
gitk REVISION /path/to/file. Może się to przydać, gdy chcesz na przykład sprawdzić pewną wersję.
Możesz także określić commit hash(często nazywany commit ID) git showpoleceniem .
git show <commitHash>:/path/to/file
git log /path/to/filecommit hashtakie, jak commit 06c98...(06c98 ... będący skrótem zatwierdzenia)commit hashgit show <commitHash>:/path/to/fileużywając commit hashkroku 3 i path/to/filekroku 1.Uwaga: dodanie ./przy określaniu ścieżki względnej wydaje się ważne, tj git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html.
git show <SHA1> --name-onlyaby ją zdobyć.
Oprócz Jim Hunziker „s odpowiedź
możesz wyeksportować plik z wersji jako,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Mam nadzieję że to pomoże :)
Aby szybko zobaczyć różnice w starszych wersjach pliku:
git show -1 filename.txt> aby porównać z ostatnią wersją pliku
git show -2 filename.txt> aby porównać z 2. ostatnią wersją
git show -3 fielname.txt> aby porównać z ostatnią trzecią ostatnią wersją
git log -ppokaże ci nie tylko dzienniki zatwierdzeń, ale także różnicę każdego zatwierdzenia (z wyjątkiem zatwierdzeń scalania). Następnie możesz nacisnąć /, wprowadzić nazwę pliku i nacisnąć enter. Naciśnij nlub, paby przejść do następnego / poprzedniego wystąpienia. W ten sposób zobaczysz nie tylko zmiany w pliku, ale także informacje o zatwierdzeniu.
git log -pmże pokazywałby również zatwierdzenia scalania.
git log -p -- filename.txtaby ograniczyć historię tylko do żądanego pliku.
Możesz użyć takiego skryptu, aby zrzucić wszystkie wersje pliku w celu oddzielenia plików:
na przykład
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Pobierz skrypt tutaj jako odpowiedź na kolejne podobne pytanie
git_root, git_log_shortA git_log_message_for_commitbrakuje.
SPOSÓB 1: (Wolę w ten sposób)
git refloggit diff-tree --no-commit-id --name-only -r <commitHash>przykład:
git diff-tree --no-commit-id --name-only -r d2f9ba4// „d2f9ba4” to identyfikator zatwierdzenia z „1.”
git show <commitHash>:/path/to/file
przykład:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift// „Src / ...” to ścieżka do pliku z „2”
SPOSÓB 2:
git refloggit reset --hard %commit ID%git reset --hard c14809fa
Pomocnik, aby pobrać wiele plików z danej wersji
Podczas próby rozwiązania konfliktów scalania ten pomocnik jest bardzo przydatny:
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
Stosowanie:
git-show-save other-branch file1.c path/to/file2.cpp
Wynik: poniższe zawierają alternatywne wersje plików:
file1.old.c
path/to/file2.old.cpp
W ten sposób zachowujesz rozszerzenie pliku, aby Twój edytor nie narzekał i mógł łatwo znaleźć stary plik tuż obok nowszego.