Изменения в ветке Git, потерянные после извлечения файла в главной ветке - PullRequest
0 голосов
/ 29 июня 2019

Есть идеи, как восстановить мои изменения, которые я сделал на шаге 2 ниже?

  1. Git checkout new branch foo
  2. Внесены некоторые изменения в foo.txt
  3. Сохранитьfoo.txt (без фиксации)
  4. Git checkout обратно к мастеру веток
  5. Git checkout file foo.txt
  6. Внесены некоторые изменения в foo.txt
  7. Сохранить foo.txt (без фиксации)
  8. Git checkout назад ветка foo
  9. Все изменения в foo.txt с шага # 2 пропали

1 Ответ

3 голосов
/ 29 июня 2019

Если вы запустили git add для этого файла после того, как вы изменили его, контент был зарегистрирован в .git - он присутствует там и его можно получить. Хотя это и не так просто - вам придется сначала найти все последние объекты, созданные Git:

find .git/objects/ -type f -printf "%T+\t%p\n" | sort

Они отсортированы по дате модификации, поэтому последние были созданы недавно. Сделайте свой путь вверх - пройдитесь по каждому из этих объектов и запускайте эту команду, пока не найдете свой контент:

git cat-file -p [40 letter hash including 2-letter directory name]

Некоторые из этих объектов - не файлы, а деревья (каталоги) и коммиты, пропустите их.

Если вы не запустили git add, то Git вообще не знает об этом файле, поэтому вы не можете попросить Git вернуть его обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...