Я хотел бы избежать вызова фарфоровых команд из моих скриптов, но есть ли способ получить некоторое поведение git checkout <commit> используя только команды сантехники, такие как checkout-index? Мне особенно интересно влияние на рабочую копию: если все чисто, checkout удаляет файлы, которые были отслежены в старой HEAD и отсутствуют в новой. checkout-index, похоже, не имеет понятия об удалении файлов. Самое близкое, о чем я могу думать, - это позвонить
git diff-tree -p <old> <new> | git apply
но вычисление всего diff кажется излишне дорогостоящим. Есть ли способ лучше?