Как найти удаленный файл в проект, история коммитов?
когда-то в моем проекте был файл, который я хотел бы получить.
проблема в том, что я понятия не имею, когда я удалил его и на каком пути он был.
Как я могу найти коммиты этого файла, когда он существовал?
7 ответов
если вы не знаете точный путь, вы можете использовать
git log --all --full-history -- **/thefile.*
если вы знаете путь к файлу, вы можете сделать следующее:
git log --all --full-history -- <path-to-file>
это должно показать список коммитов во всех ветвях, которые коснулись этого файла. Затем вы можете найти нужную версию файла и отобразить ее...
git show <SHA> -- <path-to-file>
или восстановить его в вашей рабочей копии, с:
git checkout <SHA>^ -- <path-to-file>
обратите внимание на символ вставки (^
), который получает кассе до к одному определенному, потому что в момент <SHA>
commit файл удаляется, нам нужно посмотреть на предыдущую фиксацию, чтобы получить содержимое удаленного файла
получить список удаленных файлов и скопировать полный путь к удаленным файлом
git log --diff-filter=D --summary | grep delete
выполните следующую команду, чтобы найти идентификатор фиксации этого фиксации и скопировать идентификатор фиксации
git log --all -- FILEPATH
показать разницу удаленных файлов
git show COMMIT_ID -- FILE_PATH
помните, что вы можете написать вывод в файл с помощью >
как
git show COMMIT_ID -- FILE_PATH > deleted.diff
не удалось отредактировать принятый ответ, поэтому добавьте его в качестве ответа здесь,
чтобы восстановить файл в git, используйте следующее (обратите внимание на знак " ^ " сразу после SHA)
git checkout <SHA>^ -- /path/to/file
@Amber дал правильный ответ! Просто еще одно дополнение, если вы не знаете точный путь к файлу, вы можете использовать подстановочные знаки! Это сработало для меня.
git log --all -- **/thefile.*
Предположим, вы хотите восстановить файл с названием MyFile
, но не уверены в его пути (или его расширении, если на то пошло):
предварительный просмотр.: избегайте путаницы, перейдя к корню git
нетривиальный проект может иметь несколько каталогов с похожими или одинаковыми именами.
> cd <project-root>
-
найти полный путь
git log --diff-filter=D --summary / grep delete | grep Файл myfile
delete mode 100644 full/path/to/MyFile.js
full/path/to/MyFile.js
путь & файл вы искали.
-
определите все коммиты, которые повлияли на этот файл
git log --oneline --follow -- full / path/to / MyFile.js
bd8374c Some helpful commit message
ba8d20e Another prior commit message affecting that file
cfea812 The first message for a commit in which that file appeared.
оформить заказ файл
если вы выберете первую из перечисленных фиксаций (последняя хронологически, здесь bd8374c), файл не будет найден, так как он был удален в этой фиксации.
> git checkout bd8374c -- full/path/to/MyFile.js
`error: pathspec 'full/path/to/MyFile.js' did not match any file(s) known to git.`
просто выберите предыдущий (добавьте курсор) commit:
> git checkout bd8374c^ -- full/path/to/MyFile.js
попробуйте использовать один из зрителей, например gitk
чтобы вы могли просматривать историю, чтобы найти этот наполовину запоминающийся файл. (используйте gitk --all
при необходимости для всех отраслей)
одна из вещей, которая утомительна здесь, - это получить путь к удаленному файлу, поэтому я просто записал простую команду, где dev или пользователь git могут передать имя удаленного файла и получить историю:
git log --diff-filter=D --summary | grep filename | awk '{print ; exit}' | xargs git log --all --
Если кто-нибудь, может улучшить команду, пожалуйста.