Вероятно (это случилось со мной), команда ls говорит, что она не существует , потому что у текущего пользователя нет разрешений для доступа к этому каталогу или файлу.
Удалите блокировку и убедитесь, что вы выполняете git с нужным пользователем, чтобы избежать проблем с правами.
Если вы находитесь в поле GNU / Linux с sudo :
sudo rm project_path / .git / index.lock
blockquote>
Проблема здесь в том, что имя файла содержит последовательности Unicode, представляющие не-ASCII-символы в имени файла:
$ printf '%b\n' '03.08 T&D \347\224\260\346\235\260 WeeklyReport.md'
03.08 T&D 田杰 WeeklyReport.md
Когда git status
печатает имя файла, он не уверен, если оно Это нормально для создания китайского алфавита на вашем экране, поэтому он записывает восьмеричные значения последовательности UTF-8, которые должны были бы генерировать 田 и 杰, а не печатать их. [ Редактировать: , если вы установите core.quotePath
в false
], это говорит Git, что нормально печатать такие символы, не заменяя их escape-последовательностями. См. Ниже.]
Приведенная выше команда printf
показывает один из способов выражения имени файла таким образом, который позволяет вырезать и вставлять его. Затем вы можете использовать:
git checkout -- '03.08 T&D 田杰 WeeklyReport.md'
, чтобы вернуть его.
git stash
? Используемый вами метод - запуск git stash
- позволяет сделать коммит из изменения, которое вы поставили, затем запустить git reset --hard
. Коммит, который сделал git stash
, не принадлежит ни одной ветви . Запуск git stash list
покажет коммит, который git stash
сделал. Позже вы можете делать все, что захотите.
Технически, git stash
фактически сделали два коммита , которые не находятся ни в одной ветви, но в этом случае только один из них сделал что-то полезное: он сохранил удаление файла, если вы действительно имели в виду удалить его. Это не очень сложно воспроизвести (вы можете просто удалить файл снова), поэтому вы можете просто выбросить тайник:
git stash drop
, если в нем нет ничего более ценного.
core.quotePath
Опять же, у меня здесь нет вашего хранилища, поэтому мне нужно было просто догадаться о файлах. Вот что я сделал:
$ mkdir tmp/tpath; cd tmp/tpath; git init
Initialized empty Git repository in .../tmp/tpath/.git/
$ echo text > '03.08 T&D 田杰 WeeklyReport.md'
$ git add .
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: "03.08 T&D \347\224\260\346\235\260 WeeklyReport.md"
$ git config core.quotePath false
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 03.08 T&D 田杰 WeeklyReport.md
$ git commit -m initial
[master (root-commit) 5658907] initial
1 file changed, 1 insertion(+)
create mode 100644 03.08 T&D 田杰 WeeklyReport.md
Если вы работаете в Windows или MacOS, имейте в виду, что некоторые имена файлов UTF-8 могут столкнуться с различными проблемами перевода, аналогично случаям, когда пользователь Linux может создавать два разных файла с именами readme
и README
и передайте их. Если вы никогда не перейдете из системы Windows или MacOS в Linux и наоборот, у вас не возникнет проблем, но если вы это сделаете, то можете. (Это чаще всего проблема с акцентированными символами в именах файлов, таких как agréable
или schön
. Unicode имеет несколько способов написания этих имен, но MacOS, в частности, настаивает на их написании , как .) [ 1134]
Не знаю причину. Но я работал над этим
git stash
Спасибо за ответ.
git checkout HEAD -- <filepath>
Это должно сработать