Как заставить git проверить основную ветку и удалить возврат каретки после того, как я нормализовал файлы с помощью текстового атрибута?

Итак, я добавил файл .gitattributes с такими строками

*.css text
*.js text
etc...

Затем я следовал инструкциям на http://git-scm.com/docs/gitattributes#_checking-out_and_checking-in

$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

Но теперь в моей рабочей копии все еще есть возврат каретки! У меня есть неотслеживаемые файлы, которые я хотел бы сохранить. Как мне сделать так, чтобы git снова проверил основную ветку с нормализованными файлами?

Я знаю, что файлы в репозитории нормализованы, потому что, когда я клонирую репозиторий, у меня есть все файлы без возврата каретки.


person Jason    schedule 20.06.2013    source источник


Ответы (2)


Ах ах! Проверьте предыдущую фиксацию, затем проверьте мастер.

git checkout HEAD^
git checkout -f master
person Jason    schedule 20.06.2013
comment
Спасибо за этот обходной путь, но в git очевидна проблема, что checkout -f на самом деле не вызывает повторную проверку. Другим опасным решением было бы сначала удалить все файлы рабочих копий (т.е. все, кроме .git dir). - person pfalcon; 18.03.2014
comment
Ах, да, спасибо за это! Услышав это, я предполагаю, что мы могли бы просто удалить интересующие файлы и запустить проверку. Для меня на самом деле был только один файл, который я пытался исправить. Но, конечно, это могут быть все файлы, сотни или тысячи. - person Jason; 19.03.2014
comment
Это не удается на git 1.8.3 (mac) с ошибкой: pathspec 'HEAD^' не соответствует ни одному файлу (файлам), известному git. - person dval; 10.10.2014
comment
@dval, посмотрите на изменения в этом сообщении, и вы увидите альтернативный способ сделать это. Я тоже работаю на Mac, и это сработало для меня. Я также рекомендую вам обновить свой git до версии 2+, и вы можете использовать Homebrew, чтобы сделать это безопасным и поддерживаемым способом. - person Jason; 15.07.2015
comment
У нас не сработало при попытке заменить CRLF на LF (хотя .gitattributes содержит text eol=lf). Решение @mechsin сработало без сбоев. - person Jidehem; 21.12.2017
comment
Это не работает. GIT будет обновлять только те файлы, которые изменились между двумя фиксациями (за некоторыми исключениями). Если репозиторий совершенно новый, например. только два коммита, и первый оказывается пустым, тогда это решение будет работать. В противном случае вам нужно принудительно удалить все файлы, как описано в ответе mechsin. - person jstine; 06.01.2018
comment
Привет! я привожу сюда после получения этой ошибки error: cannot stat 'empresas/presupuesto/acciones' Permission denied при намерении объединить разработку в мастер, а затем все было хорошо, когда принудительно git для проверки с git checkout -f master +1 для этого - person Elvis Technologies; 12.01.2019

Как указывали другие, можно просто удалить все файлы в репо, а затем проверить их. Я предпочитаю этот метод, и это можно сделать с помощью кода ниже

git ls-files -z | xargs -0 rm
git checkout -- .

или одна строка

git ls-files -z | xargs -0 rm ; git checkout -- .

Пользуюсь постоянно, минусов пока не нашла!

Для дальнейшего объяснения -z добавляет нулевой символ в конец каждой записи, выводимой ls-files, а -0 говорит xargs, чтобы он разделил вывод, который он получал, этими нулевыми символами.

person mechsin    schedule 24.11.2015