Есть ли способ отменить "git reset .`"? Он "перевернул" все файлы - все изменения были потеряны из моего рабочего каталога
Я поставил большое количество файлов для коммита.
Затем я понял, что лучше зафиксировать только два файла, а затем зафиксировать оставшиеся в отдельном коммите.
git reset <filename>
unstages имя файла
Я хотел все отменить,
затем переделайте два файла и зафиксируйте.
Затем подготовьте все остальные файлы и выполните коммит снова.
Как: "git add .
"(добавляет все файлы в промежуточную область)
а также "git reset <filename>
"(удаляет имя файла из области подготовки)
"git reset .
"(казалось, имеет смысл отключить все файлы)
упс..!
Это вернуло мой рабочий каталог к последней подтвержденной версии,
- Я потерял ВСЕ изменения файла, которые я сделал!:-(
Во всяком случае, чтобы "отменить"git reset .
"??
Я не нашел никакой документации по этому вопросу.
На самом деле я не нахожу никакой документации на "git reset .
" совсем.
Мое лучшее предположение, что мерзавец взял ".
msgstr "быть значением для параметра, отличного от параметра имени файла.
Но разве это невозможно исправить?
2 ответа
Да! Оказывается, можно!!
Вот почему: Git интерпретирует git reset .
какgit reset --hard
Так что удалил все изменения в моем рабочем каталоге, вернув все в состояние моего последнего коммита.
Не существуетвстроенного способа восстановить потерянные правки.
Тем не мение, git add .
сохранил копию каждого файла, в котором были эти изменения.
Нам просто нужно разобраться, где и какgit
сохранил состояние указанных файлов.
Короче говоря, выполните следующие действия:
(1):git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") \
$(egrep commit all | cut -d ' ' -f 3) > stagedNotCommitted
Это найдет и поместит список файлов, которые git проиндексировал (потому что они были размещены),
но это никогда не было зафиксировано, в файл с именемstagedNotCommitted
Поскольку git не знает имен файлов для этих файлов, stagedNotCommitted
будет список хэшей проиндексированных файлов. выглядит как
`369c722e8df1c83b6ebfc0dc2d426aa612535203
63282280da679aa19d6a2a71e08bed8487f7e688
6a540aa36ee558611528176dbf87ad8e39475222
9c8ce87dd8aff2abc78d8a5dbe976473c6fea3de
9e20a6530229dac42cb87dc0a7153edb4bad96b5
abec86bc81f8b473e5ea8f0320589619d5e726b2
b830a382cd30308782a1df12e553227100b47ba4
c8bc4788fee301c8c88ed29739927689742c55bf
f87c9f32da264e5e0b9de3d1818e291a687adab9`
...
(2):
Отсюда вы можете открыть каждый файл в вашем текстовом редакторе (я использовал Sublime) и сохранить те, которые вы хотите восстановить, под правильным именем.
Я пошел по этому пути, сохранив каждый "недоступный блог" во временный файл как таковой:
(вы можете использовать только первые несколько цифр для каждого файла)
$ git show 89f45 > _02_89f45
$ git show 07f9c > _03_07f9c
$ git show 23ad5 > _04_23ad5
...
Оттуда открыть все эти файлы в возвышенном было легко.
Просто сохраните файл с соответствующим именем.
Готово!!:-)
Обратите внимание, это работает только потому, что я уже установил все файлы, которые хотел восстановить.
Если бы я не поставил (все) их, я бы потерял удачу. (или мог восстановить только некоторые из них.)
Для получения дополнительной информации, пожалуйста, посетите следующие ссылки, которые я нашел полезными на Stackru:
Это особенно полезно, с отличным объяснением!
Отменить git reset --hard с незафиксированными файлами в области подготовки
Другие:
Хорошо, хорошо объяснил информацию:
Как я могу отменить git reset --hard HEAD~1?
У этого также есть сообщение, связывающее плагин, который утверждает, что сделал это для Вас:
Восстановление добавленного файла после выполнения git reset --hard HEAD^
Наконец, вот интересная таблица:
https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/summary
Command Scope Common use cases
git reset Commit-level Discard commits in a private branch or throw away uncommited changes
git reset File-level Unstage a file
git checkout Commit-level Switch between branches or inspect old snapshots
git checkout File-level Discard changes in the working directory
git revert Commit-level Undo commits in a public branch
git revert File-level (N/A)
Вы никогда не совершали эти изменения, так что нет, это невозможно...
Будьте уверены, я знаю, что чувствует ваша боль... и хорошая новость в том, что вы никогда больше не совершите эту ошибку!