У мене є старе зобов’язання, яке я зробив кілька тижнів тому. Я хочу відновити лише один файл з цього коміту. Що мені робити?
У мене є старе зобов’язання, яке я зробив кілька тижнів тому. Я хочу відновити лише один файл з цього коміту. Що мені робити?
Відповіді:
git checkout 'master@{7 days ago}' -- path/to/file.txt
Це не змінить HEAD, воно просто замінить локальний файл path/to/file.txt
Дивіться man git-rev-parse для можливих специфікацій редакції там (звичайно, простий хеш (як dd9bacb
) буде добре)
Не забудьте здійснити зміну (після перегляду ...)
revision-specification
так це те , що просили ОП :)
shacommit~1
(наприклад:), git checkout 0f4bbdcd~1 -- path/to/file.txt
щоб отримати команду безпосередньо перед цим.
git checkout [Revision_Key] -- path/to/file
.git checkout
може обробляти окремі файли (див. відповідь sehe), не потрібно копіювати та вставляти.
HEAD
, ORIG_HEAD
або будь-який з них в поєднанні з ^
/ ~
/ @
-style нотації.
Мені потрібно було відновити останній файл, скоєний у git. Отже, щоб ще раз повторити та надати іншу точку зору, вам потрібно зробити це, виконавши наступні два кроки:
git log -3
Тут відображаються три останні коміти. Прочитайте коментарі та ім’я автора, щоб ви звузили, яку саме версію ви хочете. Запишіть той довгий ідентифікатор фіксації (тобто b6b94f2c19c456336d60b9409fb1e373036d3d71) для потрібної версії фіксації.
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
Передайте ідентифікатор фіксації І ім'я файлу, який ви хочете відновити. Переконайтеся, що у вас є пробіл до і після подвійного дефісу.
Є багато інших способів це зробити. Але цей простіший, який я можу запам'ятати. Сподіваюся, що це допомагає.
ПРИМІТКА. Якщо ви знаходитесь у своєму проектному шляху / папці, тоді не потрібно вводити повний шлях до файлу в команді оформлення замовлення.
У всіх відповідях згадується git checkout <tree-ish> -- <pathspec>
. Станом на git v2.23.0 існує новий метод відновлення git, який повинен брати на себе частину того, що git checkout
відповідав за. Дивіться основні моменти змін у блозі github .
Типовою поведінкою цієї команди є відновлення стану робочого дерева із вмістом, що надходить із source
параметра (який у вашому випадку буде хешем фіксації).
Якщо припустити, що команда хеш - abcdef
це буде, команда виглядатиме так:
git restore --source=abcdef file_name
який (за замовчуванням) розміщує його в робочому дереві. Якщо ви хочете внести зміни безпосередньо в індекс, щоб вона могла бути здійснена відразу:
git restore --source=abcdef --worktree --staged file_name
або з короткими назвами опцій:
git restore -s=abcdef -W -S file_name