Проблема с
git checkout 1f1d3f76bac0bf6e13ceee5bb3df69f8389fc73f -- /path/to/MyMissingFile
, предположительно основана на том, что вы сказали, это га sh коммита, который удалил файл - поэтому файла там нет. Но файл находится в родительском коммите. Кстати, вы можете использовать сокращенное ha sh, а затем, прикрепив ^
или ~
к концу, вы получите родительский коммит. Так что
git checkout 1f1d3f76ba^ -- /path/to/MyMissingFile
должно работать. (Возможно, здесь есть место для ошибки, если рассматриваемый коммит является слиянием, так как вам нужно убедиться, что вы достигли правильного родителя; но похоже, что здесь это не применимо.)
Переключение на более новую команду restore
также является опцией (и, вероятно, неплохой идеей), как кто-то упоминал; но на самом деле проблема не в этом.
Как вы, похоже, обнаружили, вы также можете обратиться к master
(или к любой другой ветке, где файл все еще существует) и взять файл оттуда. , Однако я не рекомендую это (особенно если вы уже столкнулись с проблемой поиска коммита, в котором был удален файл), потому что (а) любые изменения в файле в вашей ветке до его удаления будут потеряны, и ( б) любые изменения в файле на мастере могут быть преждевременно обнаружены в вашей ветке. Может быть, вы знаете, что эти проблемы не применяются в этот раз, но это плохая привычка. Возможно, в следующий раз вы забудете об изменениях.