Не удалось Удалить Файл Из Git-Фиксации

#ruby-on-rails #git

Вопрос:

Я удалил несколько файлов из своего приложения rails с помощью git. Они были преданы и отправлены в Героку (в прямом эфире). Теперь я хотел бы вернуть пару из них, но у меня возникли проблемы с этим. Я уже некоторое время использую git и не уверен, что делаю не так. Я проверил пару страниц git, чтобы убедиться, что это должно сработать.

Файлы находятся не в моем локальном репозитории, а в git. Git перечисляет их (показывает один в моем примере), но не позволяет мне их получить.

Я нашел фиксацию, и ниже показан файл в этой зарегистрированной фиксации:

 jdc44@jdc44-Kudu:~/Websites/myapp$ git diff-tree --no-commit-id --name-only -r 9c88a26ade871
...
app/models/fitness/weight.rb
...
 

Попытка вернуть файл weight.rb:

 jdc44@jdc44-Kudu:~/Websites/myapp$ git checkout 9c88a26ade871 -- app/models/fitness/weight.rb
error: pathspec 'app/models/fitness/weight.rb' did not match any file(s) known to git
 

Пытаюсь понять, могу ли я показать файл:

 jdc44@jdc44-Kudu:~/Websites/myapp$ git show 9c88a26ade871:app/models/fitness/weight.rb
fatal: Path 'app/models/fitness/weight.rb' does not exist in '9c88a26ade871'
 

отредактированный

 jdc44@jdc44-Kudu:~/Websites/myapp$ git diff-tree -r 9c88a26ade871
9c88a26ade8719069ecd852b27a6bb354a4915f2
:100644 000000 ba4631114edea7c66e8f87109dc6e65fb95b7a6c 0000000000000000000000000000000000000000 D  app/controllers/fitness/weights_controller.rb
:100644 000000 cfca94348c82c4a6fab1c789245582cc3086f786 0000000000000000000000000000000000000000 D  app/models/fitness/weight.rb
:100644 000000 4963ad7f7939f74606b5356e264dc20c1382165b 0000000000000000000000000000000000000000 D  app/views/fitness/weights/_form.html.erb
:100644 000000 9c3f9b7f3f7177d7ba4b5609f3aa5c0769b7d1e1 0000000000000000000000000000000000000000 D  app/views/fitness/weights/create.html.erb
:100644 000000 3b9e22e45116d15eab5a494ce342307cac1ce405 0000000000000000000000000000000000000000 D  app/views/fitness/weights/delete.html.erb
:100644 000000 8e3ec02483b68e8f5a2e8de23f569dbd359d3d95 0000000000000000000000000000000000000000 D  app/views/fitness/weights/destroy.html.erb
:100644 000000 d59b3be0408d467bcedf1ac43e82916e338d30d9 0000000000000000000000000000000000000000 D  app/views/fitness/weights/edit.html.erb
:100644 000000 84a1dd6e73c35a612e4e52476d440fd7a659b657 0000000000000000000000000000000000000000 D  app/views/fitness/weights/index.html.erb
:100644 000000 4980c3adecc0b86528d99f7828c5369f185a1ba2 0000000000000000000000000000000000000000 D  app/views/fitness/weights/new.html.erb
:100644 000000 eb61383cc1e256e386357930d9db8bf88379ad2c 0000000000000000000000000000000000000000 D  app/views/fitness/weights/show.html.erb
:100644 000000 43f9c0adea7cff97c240bd02db495e908231bfd4 0000000000000000000000000000000000000000 D  app/views/fitness/weights/update.html.erb
 

Комментарии:

1. Не могли бы вы показать нам результат просто git diff-tree 9c88a26ade871 , пожалуйста?

2. Марко Луззара — Я отредактировал свой оригинальный пост, чтобы показать результат выполнения запрошенной вами команды.

3. Извините, я забыл -r опцию, не могли бы вы отредактировать заново? Спасибо. Я хотел бы видеть не только имя файла, но и полную строку этого конкретного файла.

4. Марко Луццара Еще раз благодарю вас за ваше время и комментарии. Я отредактировал свой исходный пост с помощью вашей команды -r в разделе «Для пространства», я перечислил только файлы, относящиеся к весовой модели, контроллерам, представлениям….

5. jdc44@jdc44-Куду:~/Веб-сайты/myapp$ git проверка 9c88a26ade871^ — приложение/модели/фитнес/вес.rb Это работает. В фиксации до этого — 9c88a… был файл, поэтому добавление ^ в команду «проверка» работает. Да!!

Ответ №1:

Каждая фиксация в Git представляет собой полный снимок всех файлов на данный момент. В 9c88a26ade871 нет файла app/models/fitness/weight.rb, потому что именно в этой фиксации вы его удалили.

Вам нужно получить его из фиксации, прежде чем удалять его. 9c88a26ade871^. См. gitrevisions.

git checkout 9c88a26ade871^ -- app/models/fitness/weight.rb

Или используйте более простой git restore (проверка была разделена на восстановление и переключение).

git restore --source 9c88a26ade871^ app/models/fitness/weight.rb