`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 нет, мы просто убеждаемся, что оба установлены.

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