git checkout - не отбрасывает изменения?
у меня есть изменения в моем рабочем каталоге, которые я пытаюсь отбросить (сбросить до текущей индексированной версии файлов), однако,git checkout -- <file>
не отменить изменения.
Я попытался вручную удалить файлы (rm -r files
) запустите git checkout -- .
, который отображает файлы как измененные снова.
$ git checkout -- .
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: files/Hulk.png
# modified: files/Hulk_2.png
#
no changes added to commit (use "git add" and/or "git commit -a")
под управлением git diff
показывает, что файлы изменены...
diff --git a/files/Hulk.png b/files/Hulk.png
index 1c256cb..1d37fe0 100644
Binary files a/files/Hulk.png and b/files/Hulk.png differ
diff --git a/files/Hulk_2.png b/files/Hulk_2.png
index 1c256cb..0717199 100644
Binary files a/files/Hulk_2.png and b/files/Hulk_2.png differ
Примечание: некоторые люди сказали бежать git checkout .
, однако это приведет к тому же результату, что и git checkout -- .
. The --
- это просто обозначение, используемое в команде git checkout для различения точек treeish / commit от файлов / путей.
OS: OSX 10.6 Git: 1.7.10.2
11 ответов
причиной этого было несколько файлов с одинаковым именем, но в разных случаях. В OSX, который не учитывает регистр, не любит несколько файлов с тем же именем, но разные случаи. Он рассматривает их как один и тот же файл.
Чтобы исправить это, я побежал git mv
(или просто mv
) во временное имя файла добавлены временные файлы, которые позволили git удалить старые/неправильно названные версии, а затем второй фиксации, чтобы назвать их обратно.
Это также может быть исправлено в файловой системе, которая позволяет файлы с одинаковым именем будут разными делами.
основываясь на ваших комментариях, вы должны настроить свой репозиторий с учетом регистра:
git config core.ignorecase false
это позволяет git отслеживать оба файла (хотя файловая система показывает только один, что чрезвычайно запутанно). Вот шаги репликации, чтобы продемонстрировать, что происходит, когда git правильно отслеживает чувствительность к регистру:
git init /tmp/test && cd /tmp/test
git config core.ignorecase false
echo test>test && git add test && git commit -m "lowercase t"
mv test Test
теперь git status
не показывает никаких различий в test
:
git status -s
?? Test
Commit Test
и использовать git ls-files
чтобы увидеть, что мы теперь отслеживание:
git add Test && git commit -m "uppercase T"
git ls-files
Test
test
что значит ls
отчет? Ну, просто "тест", естественно:
ls
Test
наконец, что происходит, когда мы изменяем тест?
echo garbage>Test
git status -s
M Test
M test
Какой ужас.
по какой-то причине то же самое произошло со мной, но это не было проблемой чувствительности к регистру. Удаление файла, а затем изменение ветвей решили проблему.
Я столкнулся с той же проблемой. Я обнаружил, что два проблемных файла имели символы окончания строки DOS. Я сделал это, чтобы решить проблему.
1-используйте другой Клон для изменения строки, заканчивающейся на UNIX 2-сдуть Клон, где проблема появлялась и повторно клонировать его.
чтобы избежать этой проблемы в следующий раз, я решил преобразовать файловую систему в регистр.
Я был приятно удивлен, что это довольно легко на Mac OS (10.13.4).
можно быстро создать новый диск с другой файловой системой:
- запустить Дисковую утилиту
- нажмите на контейнер
- нажмите на громкости (+)
Я назвал новый том "проекты" и установил формат в APFS (Чувствительный к регистру.)
после этого я перевел все проекты на Новый том.
что помогло в моем случае: (также улучшая ответ vinboxx х)
Я был настроен .gitattributes
следующим образом:
* text eol=crlf
(Я хотел-X перенормировать, чтобы автоматически использовать правильный формат после слияния)
после временного комментирования этой строки вместе с настройкой git config core.autocrlf false
. Все вернулось на круги своя.
Я использовал git checkout -- .
также git checkout .
== то же самое, что сказал op оба работали на Mac OSX 10.7 и Linux, работали на обоих
с Git версии 1.7.7.5 (Apple Git-26) и git 1.7.1 скомпилирован
попробуйте другое РЕПО и посмотрите, получите ли вы те же результаты. Может быть, ошибка команды в версии git?
когда вы удаляете файл из файловой системы с помощью "rm-r file", вы не удаляете его из репозитория. Йо нужно сделать Де же в git используя "git rm"