Я использую git в Windows.
Скажем, я хочу проверить, не коммитить fe4fd (сокращенно, чтобы примеры были короче), а конкретно файл foo.html из коммита fe4fd.
Согласно документации, я должен иметь возможность использовать
git checkout fe4fd foo.html
, и это должно работать.Или, возможно,
git checkout fe4fd -- foo.html
, потому что тире кажутся необязательными.
В любом случае.Я в правильном каталоге.
Если я делаю git status foo.html
или git reflog foo.html
и т. Д., Все кажется нормальным и он знает, что файл находится там.
все выглядит нормально
Я могу сделать это:
git checkout fe4fd
и он отлично работает
Я могу сделать это:
git checkout foo.html
, но я не могу сделать
git checkout fe4fd foo.html
, потому что каждыйКогда я получаю
ошибка: pathspec 'foo.html' не соответствует ни одному из файлов, известных git.
Я пробовал
- полные пути от
C:/whatever
до foo.html
- локальных путей, таких как
./foo.html
- , включая вложенную папку, например
../myrepo/foo.html
- , заключающих водинарные и двойные кавычки
что мне не хватает?
TIA.
ОБНОВЛЕНИЕ : https://stackoverflow.com/users/6330106/elpiekay дало мне доответ.ElpieKay, если вы оставите свой комментарий как ответ, я отмечу его как правильный.
Ответ таков: во время этого коммита , файл не был по этому пути, потому что родительская папка была переименована после этой фиксации.
Я понял это, прочитав документацию для git log
и узнав, что она не будет следовать истории файла через изменение пути, если вы не измените путьвключите флаг --follow
.
Я сделал то, что предложил ElpieKay, и файл явно не был частью коммита.Что было не так, потому что я знал, что это было.Но файл, который я пытался проверить, был, скажем, bar/foo.html
, и этот путь не существовал во время проверки, которую я искал.Во время этой проверки это было в baz/foo.html
.
Чтобы доказать это, я создал новую папку baz/
, cd
d для нее, и извлек файл из фиксации.Это сработало.