Подтвердить что ты не робот

Как я могу получить содержимое файла из индекса git?

У меня есть файл, который уже добавлен в мой локальный репозиторий. Я изменил его в рабочем дереве, поэтому git status показывает мне файл как измененный. Я хотел бы знать, что является содержимым файла, содержащимся в индексе, прежде чем я создам файл.

Я могу представить два способа сделать это:

  • вернуть патч, созданный git diff, и применить его к файлу в рабочем дереве
  • используйте git checkout-index, укажите на временный файл и прочитайте содержимое там

Есть ли более простой способ?

4b9b3361

Ответ 1

Используйте префикс : для доступа к объектам в текущем индексе (поэтапный, но еще не проведенный).

git show :file

Подробнее см. руководство gitrevisions.

Ответ 2

Чтобы вырезать файл из индекса, я не уверен в существовании существующего сценария, но вы можете использовать ls-files для запроса индекса:

$ git ls-files -s README
100644 67cfeb2016b24df1cb406c18145efd399f6a1792 0   README
$ git cat-file blob 67cfeb2016b24df1cb406c18145efd399f6a1792
# etc.

Вы можете скомпоновать команды следующим образом:

git cat-file blob $(git ls-files -s README | awk '{print $2}')

(Хотя, конечно, я изобретаю колесо здесь.)

Однако, если вы просто хотите открыть оригинал и ваши изменения в редакторе, используйте команду difftool. Он копирует индексированную версию во временный файл для вас и открывает vimdiff (или все, что вы хотите), и он очень гибкий.

Ответ 3

Существует три способа получения различий с git

git diff graph

чтобы посмотреть, какая разница между файлом в рабочем каталоге и индексом, который вам нужен только:

git diff name_of_file

Я писал об этом более подробно в другом месте