Есть ли способ отменить "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)

Вы никогда не совершали эти изменения, так что нет, это невозможно...

Будьте уверены, я знаю, что чувствует ваша боль... и хорошая новость в том, что вы никогда больше не совершите эту ошибку!

Другие вопросы по тегам