Git восстановить файлы - PullRequest
       45

Git восстановить файлы

1 голос
/ 28 марта 2019

Я добавил локальные файлы в git repo (git add .) и зафиксировал.

Затем удалил файлы с git rm * и зафиксировал снова (второй коммит). Это удаленные файлы как локально, так и удаленно.

Горячий, чтобы вернуть файлы обратно в ту же локальную папку из git (с первого коммита)?

Спасибо.

Ответы [ 4 ]

5 голосов
/ 28 марта 2019

Поскольку вы зафиксировали, даже не имеет значения, существует ли локальный файл в вашей файловой системе в HEAD вашей ветви, потому что он является частью истории Git. Чтобы извлечь файл из более ранней фиксации, вы можете попробовать проверить его:

git checkout abc123 -- path/to/some/file.ext

где abc123 - хэш SHA-1 предыдущего коммита. Если вы не знаете, что такое хеш SHA-1, просто запустите git log из bash и найдите более ранний коммит вместе с хешем для этого коммита.

Edit:

Если вы действительно хотите вернуть всю ветку к более раннему коммиту, то в общем случае безопасный способ сделать это - git revert. Итак, продолжая приведенный выше пример, если вы хотите отменить последний коммит abc123, вы можете попробовать:

git revert abc123

Это добавит новый коммит поверх вашей ветви, который, однако, просто функционально отменит то, что делал предыдущий коммит HEAD. Это должно оставить все файлы в вашем проекте в их более раннем состоянии.

2 голосов
/ 28 марта 2019

Если вы зафиксировали только удаленные файлы, у вас есть как минимум две опции:

  1. Создать новый коммит, который отменяет старый коммит

    git revert HEAD
    git push
    
  2. Сбросьте вашу ветку до предыдущего коммита.

    git reset --hard HEAD
    git push -f
    

    Обратите внимание, что этот второй вариант является полностью разрушительным.Если вы добавили какие-либо другие изменения в предыдущий коммит, он также отменит все эти изменения.Кроме того, если вы работаете с другим членом команды в той же ветке, то git push -f создаст для них проблемы. Это следует использовать только в качестве крайней меры или если вы уверены, что не будете портить жизнь другим людям.

2 голосов
/ 28 марта 2019
git reset --hard HEAD^

вернет ветку за один коммит и соответствующим образом обновит рабочее дерево (восстанавливая ваши файлы).

На данный момент вам нужно только нажать на удаленный доступ, используя --force, если вы уже передали предыдущее состояние.

Однако, если вы находитесь в отключенном состоянии HEAD, это не сработает, и вам придется проверить его (см. Ответ Тима).

1 голос
/ 28 марта 2019

Чтобы вернуться к коммиту git reset HEAD~1, затем выдвинуть его к источнику git push -f origin branch_name

...