#bash #git
#bash #git
Вопрос:
Если я запущу:
git log --diff-filter=D --summary | grep delete
Я могу получить список всех удаленных файлов в репозитории, но на самом деле он не дает мне идентификатор объекта для этих файлов.
Я хочу иметь возможность запускать git cat-file для фактического объекта удаленного файла в .git/object / Есть ли способ получить список идентификаторов объектов для удаленных файлов, чтобы я мог git cat-file их?
Я не хочу восстанавливать файл для его просмотра.
Ответ №1:
Как только у вас будет sha1
код фиксации, из которой был удален файл, вы сможете найти содержимое файла в родительском элементе этой фиксации.
# if 'sha1' points at the commit, 'sha1~' will point at its parent
git show sha1~
На самом деле вам не нужен хэш файла, git show
или git cat-file
оба понимают, как перемещаться по содержимому коммита по пути :
# to view the content of the file :
git show sha1~:path/to/dir/file
git cat-file -p sha1~:path/to/dir/file
# if you want to see the hash of the file :
git ls-tree sha1~:path/to/dir
git cat-file -p sha1~:path/to/dir
[править]
Из вашего комментария: похоже, sha1
что вы нашли не тот коммит, который удалил файл, который вы проверяли.
Чтобы подтвердить это, запустите :
git show --name-status sha1
Если вы намерены найти фиксацию этого удаленного файла path/to/file
, я бы предложил использовать следующую git log
команду :
git log --name-status -- path/to/file
# you should quickly spot the commits which display :
D path/to/file
--graph
часто бывает очень полезно разобраться в истории,
--oneline
предоставляет представление, аналогичное тому, что делают графические средства просмотра.
Вы можете попробовать оба следующих способа, чтобы убедиться в этом сами :
git log --graph --name-status -- path/to/file
git log --graph --oneline --name-status -- path/to/file
Комментарии:
1. похоже, содержимое файлов также находится в фиксации, где файл был удален. Я могу видеть содержимое файлов как в sha1, так и в sha1 ~
2. рад, что смог помочь. Я добавил несколько дополнительных примечаний в свой ответ.