могу ли я получить идентификатор объектного файла для удаленного файла с помощью git?

#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. рад, что смог помочь. Я добавил несколько дополнительных примечаний в свой ответ.