2010-06-30 3 views
40

Используя Chris's answer по другому вопросу, я мог бы добавить историю снимков в мой репозиторий git. Поскольку один из файлов не является частью моей истории, но только в моментальных снимках, первая оригинальная фиксация теперь также содержит удаление этого файла. Как я могу отменить это?Как восстановить файл, ранее удаленный в истории git?

Сначала я думал, что это противоположность How do I remove sensitive files from git’s history, но на самом деле я не хочу вставлять файл в историю, но просто удаляю удаление из истории.

+1

Git не отслеживает намерения, только содержание. Если файл существует в предке и удаляется в дочернем коммите, то значение «удалить удаление из истории» и «повторно вставить в историю» в одно и то же: убедитесь, что файл отображается у ребенка и его дочерних элементов , –

ответ

42

Я получил его:

git tag originalHead # just in case 
git rebase -i <id of the parent of the commit that deleted the file> 
# change pick to edit for that commit 
git checkout <id of the previous commit> <filename> # thanks for reminding, kubi 
git commit --amend 
git rebase --continue 
git tag -d originalHead 

редактировать, к сожалению, это оставит все теги на старой временной шкале, см here

+2

+1 Для ответа на, казалось бы, невыполнимый вопрос. Вау. – hobs

68
git checkout <commit> <filename> 
+9

спасибо, но это только восстанавливает его. Я хочу, чтобы история выглядела так, как будто файл никогда не удалялся. –

Смежные вопросы