Найдите последнюю фиксацию, которая повлияла на данный путь. Поскольку файл не находится в фиксации HEAD, этот фиксатор должен был удалить его.
git rev-list -n 1 HEAD -- <file_path>
Затем проверьте версию на фиксации раньше, используя символ каретки (^
):
git checkout <deleting_commit>^ -- <file_path>
Или в одной команде, если $file
является файлом, о котором идет речь.
git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file"
Если вы используете zsh и включили опцию EXTENDED_GLOB, символ каретки не будет работать. Вместо этого вы можете использовать ~1
.
git checkout $(git rev-list -n 1 HEAD -- "$file")~1 -- "$file"
z
означает (un) z̲ip. x
означает извлечение файлов из архива. v
означает печатать имена файлов v̲erbosely. f
означает, что следующий аргумент является именем файла. Вместо просмотра всех опций вы можете перейти к 3.4.3 Short Options Cross Reference
командой info tar
.
x
означает --extract
. v
означает --verbose
. f
означает --file
. z
означает --gzip
. Вы можете комбинировать однобуквенные аргументы вместе, и f
принимает аргумент, имя файла. Есть кое-что, на что вам следует обратить внимание:
Буквы коротких опций могут объединяться, но вы не обязаны это делать (по сравнению со старыми опциями; см. Ниже). Когда короткие опции объединяются в набор, используйте одну (одну) черту для них всех, например, '' tar '-cvf'. Только последний вариант в таком наборе может иметь аргумент (1).
Этот старый способ написания опций tar может удивить даже опытных пользователей. Например, две команды:tar cfz archive.tar.gz file tar -cfz archive.tar.gz file
совершенно разные. Первый пример использует «archive.tar.gz» в качестве значения параметра «f» и распознает параметр «z». Второй пример, однако, использует 'z' в качестве значения для опции 'f' - вероятно, не то, что предполагалось.