Ответ 1
Чтобы завершить свой собственный ответ, синтаксис действительно
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
Команда принимает обычный стиль ревизии, что означает, что вы можете использовать любой из следующих вариантов:
- название ветки (как предложил ash)
HEAD
+ x количество^
символов- Хэш SHA1 данной ревизии
- Первые несколько (возможно, 5) символов данного хэша SHA1
Совет Важно помнить, что при использовании "git show
" всегда указывает путь от корня хранилища, а не от текущей позиции в каталоге.
(Хотя Mike Morearty упоминает, что, по крайней мере, в git 1.7.5.4 вы можете указать относительный путь, поставив "./
" в начале пути - например:
git show HEAD^^:./test.py
)
До git1.5.x это было сделано с помощью некоторой сантехники:
git ls-tree <rev>
показать список одного или нескольких объектов blob в коммите
git cat-file blob <file-SHA1>
cat файл, поскольку он был зафиксирован в определенной ревизии (аналогично svn кошка). используйте 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
!
См. commit 3214594, commit 7bcf341 (09 сентября 2016 г.), commit 7bcf341 (09 сентября 2016 г.) и commit b9e62f6, совершить 16dcc29 (24 августа 2016 г.) Йоханнесом Шинделином (dscho
).
(Merged by Junio C Hamano -- [TG411] -- in commit 7889ed2, 21 Sep 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
" начал сегрегировать недавно (2017 г.), что
исправлено в Git 2.15 (четвертый квартал 2017 года)
См. commit cc0ea7c (21 сентября 2017 г.) автора Джеффа Кинга (peff
).
(Merged by Junio C Hamano -- [TG420] -- in commit bfbc2fc, 28 Sep 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
)