Почему `git diff-tree <tree-ish>` не выводит результат при применении к самой первой фиксации?

Я обычно использую git diff-tree <tree-ish> с этими параметрами:--no-commit-id --name-status -r или --no-commit-id --name-only -r чтобы вывести список добавленных и измененных файлов в конкретном коммите.

Я только что заметил сегодня, что эта команда не выводит результат при применении к самой первой фиксации!.

Так почему и как это преодолеть?

1 ответ

Вероятно, причина в том, что в документации указано:

Когда даны два дерева, он сравнивает первое дерево со вторым. Когда дается одиночный коммит, он сравнивает коммит с его родительскими.

Первая фиксация в репозитории не имеет родителя.

Однако вы можете указать --root для этой фиксации:

--root
Если указано --root, начальная фиксация будет отображаться как большое событие создания. Это эквивалентно сравнению с деревом NULL.

Обратите внимание, что если вы создаете какой-то сценарий или приложение, которое выводит эти вещи, вам нужно будет определить, что это первая фиксация, добавляя --root в другом месте не будет того, что вы хотите.

Итак, пока это не дает результата:

git diff-tree -r HASH-OF-FIRST-COMMIT

Это должно сравнить первую фиксацию с пустым деревом:

git diff-tree -r --root HASH-OF-FIRST-COMMIT
Другие вопросы по тегам