`git stash apply` удалил случайный каталог из моей рабочей копии
Я только что попробовал git stash save
в первый раз. Работало нормально. Потом я попробовал git stash apply
и хотя мои незафиксированные изменения были восстановлены, другой эффект состоял в том, что был удален случайный каталог из корня моей рабочей копии. Я не знаю, почему он выбрал именно этот каталог, в корне есть много других, подобных ему.
git stash save
выход:
Saved working directory and index state WIP on clipping: cfeac4b - applying the solution from http://stackru.com/questions/40385482/why-cant-i-use-opengl-es-3-0-in-qt
HEAD is now at cfeac4b - applying the solution from http://stackru.com/questions/40385482/why-cant-i-use-opengl-es-3-0-in-qt
укороченный git stash apply
выход:
Removing debug_stencil_not_working/textureandlight.js
Removing debug_stencil_not_working/qtlogo.png
[... more removes here ...]
On branch clipping
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: documentation/textureSize_missing.txt
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: ../debug_stencil_not_working/qtlogo.png
deleted: ../debug_stencil_not_working/textureandlight.js
[... more deleted files here ...]
modified: main.cpp
modified: main.qml
[... more modified files here ...]
Untracked files:
(use "git add <file>..." to include in what will be committed)
../dbg_repeater/dbg_repeater.pro.user
debug_stencil_not_working/
[... more files and dirs here ...]
Примечание: каталог, который был удален, был фиксированным и продвинутым. Там не было никаких незавершенных локальных изменений.
Есть идеи, почему этот случайный каталог был удален?
Кроме того, как восстановить этот каталог? Когда я просматриваю рут в веб-интерфейсе github, он там. Но я пытался git pull origin clipping
и это не вернуло этот каталог обратно в мою рабочую копию.
Редактировать: я понял, как восстановить его. В контекстном меню TortoiseGit я выбрал "Diff", а в списке удаленные файлы были перечислены как "отсутствующие". Я выбрал их все, щелкнул по ним правой кнопкой мыши и выбрал "вернуть". Все еще не знаю, почему каталог был удален в первую очередь.
1 ответ
У меня была такая же проблема, и я случайно обнаружил, что в одном из файлов.gitignore была запись с этим каталогом, которая была удалена в форме: каталог /* или каталог /** Это происходит только тогда, когда каталог сопровождается групповым символом char.
Удаление этой строки в моем случае решило проблему (в любом случае ее там быть не должно)
Извините, но я не могу объяснить, почему Git делает это, может, кто-то другой может.
До сих пор не знаю, почему каталог был удален.
Возможная причина - когда GIT_DIR
установлен.
"git stash apply
"в подкаталоге вторичного рабочего дерева не удалось правильно получить доступ к рабочему дереву, что было исправлено с помощью Git 2.24 (4 квартал 2019 г.).
См. Commit dfd557c (4 октября 2019 г.) Йоханнес Шинделин (dscho
).
(Слияние Junio C Hamano -gitster
- в коммите 66102cf, 11 октября 2019 г.)
stash apply
: правильно сообщать о статусе даже в подкаталоге рабочего дереваКогда Git хочет создать дочерний процесс Git внутри подкаталога рабочего дерева, пока
GIT_DIR
установлен, нам необходимо явно указать каталог верхнего уровня рабочего дерева, потому что его нельзя обнаружить:
- текущий каталог не является каталогом верхнего уровня рабочего дерева, и
- и он не находится внутри родительского каталога
GIT_DIR
.Это устраняет проблему, когда
git stash apply
будет сообщать почти обо всем удаленном или неотслеживаемом при запуске в подкаталоге рабочего дерева.Чтобы убедиться, что мы не вводим "обратную проблему", то есть когда
GIT_WORK_TREE
определено, ноGIT_DIR
нет, мы просто убеждаемся, что оба установлены.