1

У меня проблемы с восстановлением изменений из сохраненного и неотслеживаемого файла в git. Смотрите минимальный пример ниже:

mkdir test_stash
cd test_stash/
git init
echo "text" | tee a.txt b.txt
git add a.txt
git commit -m "First commit"
git stash -u    #stash b.txt
echo "newtext" > b.txt
git add b.txt
git commit -m "Second commit"
git stash apply

Это возвращает мне ошибку:

b.txt already exists, no checkout
Could not restore untracked files from stash entry

Один пример немного глуповат, но я столкнулся с этой проблемой, когда сохранял изменения, прежде чем извлекать данные с удаленного компьютера, а затем обнаружил, что на удаленном сервере был создан новый файл с тем же именем.

После некоторого поиска в Google я смог восстановить изменения с помощью:

git checkout stash -- .
git checkout stash^3 -- .
git reset HEAD . #to unstage

но это кажется довольно хакерским. Разве нет способа принудительно применить мой git stash apply , чтобы таким образом привести мое рабочее пространство в исходное состояние до того, как stash? В любом случае изменения в файле b.txt уже зафиксированы, поэтому я не рискую потерять несохраненные изменения.

1 ответ1

1

Когда вы сохраняете тайник, Git также запоминает коммит. Таким образом, вы можете просто создать новую ветку на основе этого коммита с помощью git stash branch <branchname> вместо применения stash.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .