У меня есть файл, скажем, file.txt, я сделал мерзавца mv file.txt к file1.txt, затем я создал новый файл под названием file.txt и работал над ним. К сожалению, я не добавил что файл к мерзавцу все же. Так или иначе проблема состоит в том, что я сделал притон мерзавца, затем притон мерзавца применяется, но новый file.txt исчез... так или иначе для возвращения его?
Проблема здесь в основном в неправильном понимании того, что делает git stash save
. Сохраняются только изменения в отслеживаемых файлах. Не отслеживаемые файлы не сохраняются с помощью git stash
. Когда вы переместили file.txt в file1.txt, новый файл file.txt является неотслеживаемым файлом, и не будет сохранен git stash
. Это не ошибка, это просто поведение git stash
. Возможно, в документации для git stash
это должно быть более ясно.
Как указано в документации для git stash save
, он выполнит git reset --hard
после сохранения ваших изменений. Это был git reset --hard
, который перезаписал новый файл file.txt. Кто-то может возразить, что git reset --hard
должен генерировать предупреждение, если неотслеживаемый файл будет перезаписан, но я бы все равно не назвал это ошибкой. Он делает то, что должен делать.
Здесь важно понять - и что избавило бы вас от многих проблем - это то, что git stash save
не сохраняет неотслеживаемые файлы (и, вероятно, не должно) .
Похоже, серьезная ошибка (например, потеря данных) в тайнике. Пожалуйста, сообщите об этом. К сожалению, я не верю, что есть способ вернуть новый file.txt
.
Эта ошибка исправлена в git> = 1.7.1.1.
Этот пост предназначен для простой иллюстрации процесса воссоздания, не забиваясь комментариями. Примечание: Использование Git версии 1.7.0.2
~/test $ git init
~/test $ echo "hello" > file.txt
~/test $ git add .
~/test $ git commit -m "init commit"
~/test $ git mv file.txt file1.txt
~/test $ echo "new data" > file.txt
~/test $ git stash
~/test $ git stash apply
~/test $ cat file.txt
cat: file.txt: No such file or directory
~/test $ cat file1.txt
hello