Как получить хэш дерева индекса в git? - PullRequest
0 голосов
/ 02 ноября 2019

С помощью git, как я могу получить хэш дерева поэтапных изменений? То есть, какой хэш дерева коммита (не хеш коммита) был бы, если бы я зафиксировал изменения?

1 Ответ

2 голосов
/ 02 ноября 2019

Самый простой способ - это зафиксировать дерево:

git commit-tree

Объяснение

Вам не нужно делать полный коммит - хотя, конечно, это также сработает. Вам просто нужен снимок , который будет иметь коммит.

К счастью, способ git commit работает в том, что он создает коммит в несколько этапов. Когда-то git commit был простым сценарием оболочки, который выполнял другие более простые команды Git: 1

  1. git write-tree: это не требует аргументови - в случае успеха - создает объект дерева из того, что сейчас находится в индексе, и выводит идентификатор хеша на его стандартный вывод.

  2. git commit-tree: для этого требуется несколько параметров(столько родительских хеш-идентификаторов, сколько вы выберете, и один хеш-идентификатор дерева) и сообщение фиксации и создает объект фиксации. Снимок коммита - это дерево, хеш-идентификатор которого вы дали ему, полученный на шаге 1. Команда выводит хеш-код нового объекта коммита на стандартный вывод.

  3. git update-ref: это обновляет ссылку, такую ​​как имя ветви. Требуется как минимум два аргумента: имя для обновления и новое значение (или флаг, обозначающий «удалить имя»).

Все, что вам нужно - это шаг № 1.


1 git update-ref может быть новее, чем сценарий оболочки коммитов, поскольку в старые добрые времена написание ссылки означало только использование соответствующей команды echo. Символический HEAD ref был просто символической ссылкой. Рекомендации никогда не были упакованы. Как только ссылки стали более интересными и нуждались в блокировке, git update-ref стало необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...