Чтобы завершить свой собственный ответ, синтаксис действительно
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
Команда принимает обычный стиль ревизии, то есть вы можете использовать любое из следующего:
- название филиала (как предложено по золе )
HEAD
+ х количество ^
символов
- Хэш SHA1 данной ревизии
- Первые несколько (возможно, 5) символов данного хэша SHA1
Совет Важно помнить, что при использовании " git show
", всегда указывайте путь от корня хранилища , а не текущую позицию каталога.
(Хотя Майк Морарти упоминает, что, по крайней мере с git 1.7.5.4, вы можете указать относительный путь, поставив " ./
" в начале пути - например:
git show HEAD^^:./test.py
)
В Git 2.23+ (август 2019 г.) вы также можете использовать команду,git restore
которая заменяет запутанную git checkout
команду
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
Это восстановило бы на рабочем дереве только тот файл, который присутствует в коммите "source" ( -s
) SHA1 или ветви somebranch
.
Чтобы восстановить также индекс:
git restore -s <SHA1> -SW -- afile
( -SW
: сокращение от--staged --worktree
)
До git1.5.x это было сделано с помощью некоторой сантехники:
git ls-tree <rev>
показать список одного или нескольких объектов blob в коммите
git cat-file blob <file-SHA1>
cat файл, который был зафиксирован в определенной ревизии (аналог svn cat). используйте git ls-tree для получения значения заданного файла-sha1
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree перечисляет идентификатор объекта для $ file в ревизии $ REV, это вырезано из вывода и используется в качестве аргумента для git-cat-file, который на самом деле должен называться git-cat-object, и просто выдает дамп этот объект на стандартный вывод.
Примечание: начиная с Git 2.11 (4 квартал 2016 г.), вы можете применить фильтр содержимого к git cat-file
выводу!
См. Коммит 3214594 , коммит 7bcf341 (09 сентября 2016 г.), коммит 7bcf341 (09 сентября 2016 г.) и коммит b9e62f6 , коммит 16dcc29 (24 августа 2016 г.) от Johannes Schindelin ( dscho
) .
(Слиты Junio C Hamano - gitster
- в фиксации 7889ed2 , 21 сент 2016)
cat-file
: поддержка --textconv
/--filters
в пакетном режиме
Несмотря на то, что " git hash-objects
", который является инструментом для получения потока данных внутри файловой системы и помещения его в хранилище объектов Git, позволял выполнять преобразования "из внешнего мира в Git" (например, преобразования конца строки и приложения чистого фильтра), и с самого начала у него была функция, включающая по умолчанию, его обратная операция " git cat-file
", которая берет объект из хранилища объектов Git и выводит его для потребления внешним миром, не имела эквивалентного механизма для запустить "Git-to-external-world"
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
Примечание: " git cat-file --textconv
" начал segfaulting недавно (2017 г.), что было исправлено в Git 2.15 (4 квартал 2017 г.)
Смотрите коммит cc0ea7c (21 сентября 2017 г.) Джеффа Кинга ( peff
) .
(Объединено Junio C Hamano - gitster
- в коммите bfbc2fc , 28 сентября 2017 г.)
Обратите внимание, что для переопределения / замены файла с прошлым содержимым вам больше не следует использовать запутанную git checkout
команду , но git restore
(Git 2.23+, август 2019 г.)
git restore -s <SHA1> -- afile
Это восстановит на рабочем дереве только тот файл, который присутствует в коммите "source" ( -s
) SHA1.
Чтобы восстановить также индекс:
git restore -s <SHA1> -SW -- afile
( -SW
сокращение от--staged --worktree
)
git show
(бесполезно) использует другой синтаксис с двоеточием.git show 2c7cf:my_file.txt