git говорит мне, что мои файлы изменены, но я не вижу никакой разницы
Я только что установил последнюю версию Git (1.9.5), и внезапно он говорит мне, что мое рабочее дерево не чистое (изменения не размещены), но я не вижу изменений ни в одном из моих файлов в каком-либо инструменте сравнения (Я попробовал встроенную Черепаху и Visual Studio). Когда я запускаю git status, он говорит:
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: inc/i_lab_orders.asp
modified: lab_order_list.asp
modified: slib/lab_order_lib.asp
Тем не менее, инструмент сравнения Git GUI сообщает мне, что все строки изменены, но я не вижу никакой разницы. То же самое с разницей в git bash.
Бег git reset --hard
совсем не помогает - команда выполняется без каких-либо проблем, но в итоге у меня остаются те же "измененные" файлы.
ОБНОВЛЕНИЕ: core.autocrlf имеет значение false, core.fileMode также имеет значение false. Я также заметил, что файлы, о которых сообщается, что они были изменены, это именно те файлы, которые были зафиксированы во время последнего коммита.
Я на винде.
3 ответа
Добро пожаловать в ад. Приятного пребывания:-)
Разница, которую вы не видите, это конец строки. Короче говоря, вы сказали Git преобразовать все окончания строк в Windows или Unix, и в репо есть файл с разными окончаниями строк в репо.
Когда вы извлекаете файл, Git выполняет преобразование, создавая локальный файл, который выглядит правильно. Когда вы делаете diff
Git не конвертирует (потому что файл на диске должен быть правильным и зачем он конвертирует то, что уже находится в репо?), И теперь вы получаете различия, которых нет.
Решение: убедитесь, что Git настроен правильно для каждого разработчика, который может push
зафиксируйте файл один раз с правильными окончаниями и получите глупую шляпу для всех, кто создает файлы с неправильными окончаниями строк.
Связанные с:
Исправлено путем ручного удаления папки.git\rebase-merge-failed. Спасибо всем за попытку помочь мне.
ОБНОВЛЕНИЕ Я также подозреваю, что причина была в том, что у меня было text=auto
в моем файле.gitattributes.
Изменение также может быть файловым модом, но вы можете сказать, что git игнорирует что-то вроде этого.
git config core.fileMode false
Я рекомендую вам использовать gitk
На убунту есть просто
sudo apt-get install gitk