Проблема заключается в том, что имя файла содержит последовательности 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, в частности, настаивает на их написании .)1051 *