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 выполняет преобразование, создавая локальный файл, который выглядит правильно. Когда вы делаете diffGit не конвертирует (потому что файл на диске должен быть правильным и зачем он конвертирует то, что уже находится в репо?), И теперь вы получаете различия, которых нет.

Решение: убедитесь, что Git настроен правильно для каждого разработчика, который может pushзафиксируйте файл один раз с правильными окончаниями и получите глупую шляпу для всех, кто создает файлы с неправильными окончаниями строк.

Связанные с:

Исправлено путем ручного удаления папки.git\rebase-merge-failed. Спасибо всем за попытку помочь мне.

ОБНОВЛЕНИЕ Я также подозреваю, что причина была в том, что у меня было text=auto в моем файле.gitattributes.

Изменение также может быть файловым модом, но вы можете сказать, что git игнорирует что-то вроде этого.

git config core.fileMode false

Я рекомендую вам использовать gitk

На убунту есть просто

sudo apt-get install gitk
Другие вопросы по тегам