Увидев в командной строке следующее:
# On branch RB_3.0.10
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.htm
Я пытаюсь отменить свои изменения, набрав команду:
git checkout -- index.htm
но когда я повторно запускаю git status, он выглядит точно так же. Касса не работает. Я делаю что-то неправильно? Я использую GIT 1.6.1.2 для windows / cygwin.
# On branch RB_3.0.10
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.htm
git checkout HEAD -- index.htm
Работает ли (извлечение из последнего зафиксированного состояния вместо извлечения из индекса)?git checkout HEAD -- index.htm
у меня сработало!Ответы:
Это меня уже давно беспокоит, почти в каждом репо, которое я проверял, были изменения, которые я не мог отменить. Короче, все вышеперечисленное перепробовал, ничего не вышло. Вот что я сделал, чтобы вернуть все в норму (на Mac):
источник
Вот мой опыт, установите следующие переменные в
.git/config
:затем запустите
$ git checkout HEAD .
, и все работает. но$ git checkout -- .
нет, странно!* git версии 1.9.3
источник
Какие изменения
git diff
отображаются в файле? В Windows я видел проблемы с окончанием строк, вызывающие подобные проблемы. В этом случае посмотрите, какие настройки у вас есть,git config core.autocrlf
иgit config core.safecrlf
. Здесь есть некоторая документация по этим настройкам .Я бы сказал, если вы используете
git svn
для интеграции с Subversion, убедитесь, чтоautocrlf
он выключен. Насколько я могу судить, в этой конфигурации он просто сломан, и это заставляет большинство инструментов думать, что файлы были изменены, когда вы сделали,checkout
чтобы отменить любые изменения.Если вы видите проблему там, где это есть
git checkout
, а затемgit status
показывает, что файл все еще изменен, иgit diff
показывает, что файл изменен в каждой строке файла, то это проблема, которую вы наблюдаете.источник
Я думаю тебе нужно пройти
-f
На странице руководства (
man git-checkout
, GIT-CHECKOUT (1)):Например, отменить изменения в текущей ветке и переключиться на другую ветку:
источник
-f
git checkout -f -- filename
-f
git checkout -f master
бросил «Уже на 'master'», но изменений не было.Это могут быть окончания строк, как предлагает @ 1800-information, но другая возможность заключается в том, что разница (которая не позволяет вам вернуть эти файлы с помощью команды проверки) является одним из файлового режима. Вот что случилось со мной. В моей версии git вы можете обнаружить это, используя
И он покажет вам изменения режима файла. Однако он по-прежнему не позволит вам вернуть их, используя checkout, даже с параметром -f. Для этого используйте либо
или измените свой git .config в текстовом редакторе, добавив
После этого вы можете использовать
и файл должен исчезнуть.
(Я получил все это из ответов на вопросы, как сделать git игнорировать изменения режима (chmod)? И update-file-permissions-only-in-git )
источник
Вы используете OSX или Windows? Если это так, возможно, проблема в двух файлах с одинаковыми именами и разными регистрами. например. index.htm и Index.htm
Windows и OSX по умолчанию используют файловую систему без учета регистра, что конфликтует с git, чувствительным к регистру.
источник
У меня была эта проблема, и после попытки всего вышеперечисленного ничего не получилось.
Что сработало для меня, так это удалить каталог, в котором находился файл, затем сделал
git status
и убедился, что все файлы в этом каталоге теперь помечены как удаленные. После этого я просто сделал,git checkout -f
и все вернулось в норму.источник
Я работал над
libGDX
проектом,Android Studio
и я хотел отменить все сделанные мной изменения, но у меня ничего не работало, решение, которое я придумал, заключалось в том, чтобы зафиксировать все изменения в новой веткеа затем вы можете удалить
TRASH
ветку, если хотите.источник
У меня была такая же проблема, ничего из приведенных выше комментариев не помогло. Оказалось, что моя файловая система не чувствительна к регистру (по умолчанию osx, но окна, вероятно, ведут себя одинаково), и файл присутствовал как в верхнем, так и в нижнем регистре в одном каталоге с разным содержимым. Поскольку на моем компьютере оба имени указывали на один и тот же файл, git status всегда показывал модификацию, что бы я ни делал. Чтобы решить проблему:
Мне пришлось удалить один из файлов с другого компьютера и отправить его в репо.
полностью удалить всю локальную версию
сделать git clone с нуля
источник
У меня была аналогичная проблема, когда я не мог отбрасывать файлы, которые либо не существуют, либо были изменены. Я использую Visual Studio на работе и обнаружил, что это происходит при переключении веток во время работы приложения.
git checkout
и попытки отбросить не помогли. Это не сработает, иначе мне просто скажут, что у меня нет разрешения.Решение, которое сработало:
Перезапуск - это боль, но это сработало быстрее, чем 100 попыток.
источник
Есть простое решение. Если это произойдет (обычно из-за неожиданного завершения работы Windows или дампа памяти), и вы не можете отменить свои изменения и даже переключиться между ветвями (Git говорит, что у вас недостаточно прав); в
Windows
средеshow all hidden files and folders
из параметров папки. Перейдите в каталог GIT (он должен начинаться с.git
) и удалите"index.lock"
файл. Тогда Git позволит вам делать все, что вы хотите.источник
Я закончил тем, что сделал, а
git stash
затем,git stash clean
чтобы избавиться от некоторых. Не видел никаких автоматических конфигураций cr / lf в материалах .git / или ~ / .git.источник
В моем случае я не мог отменить изменения, связанные с каталогом. например, когда я запустил git diff, я бы увидел следующее:
-Subproject commit fdcccccccccccccccccccccccccccccccccccccc +Subproject commit f1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Я позвонил в этот каталог и запустил там git status. Он был в отключенном состоянии HEAD. А потом я просто забежал
git checkout master
туда. Это поправило меня. Но это не помогает для конкретного сценария, о котором здесь спрашивают.источник
Это старый вопрос, но он все еще актуален для меня. Я не нашел ответа, пока не спросил в офисе и не обнаружил, что проблема связана с подмодулями. Когда они обновляются, и ваш собственный репозиторий не отражает эти изменения, он обнаруживает различия, сброс заголовка не помогает. В этом случае запустите:
Это должно помочь исправить ситуацию (в данном конкретном случае)
источник
У меня была проблема с разрешениями в Windows, и мне пришлось сделать,
icacls containingFolder /reset /t /l /c
а затем дважды щелкнуть папку, чтобы вернуть свои разрешения.источник
У меня были .gitattributes со следующим содержанием:
* text=auto eol=lf
Чтобы решить эту проблему, отредактируйте,
.gitattributes
чтобы удалить эту строку, которая ослабляет окончание строки. Затемgit reset --hard HEAD
вернул файлы и.gitattributes
файл.источник
Для меня эта проблема возникла из-за комбинации загрузки образа Git-LFS, который был загружен через Netlify CMS и по-разному обслуживается их обработчиком Netlify Large Media.
Мое решение заключалось в том, чтобы закомментировать / удалить эти строки из моего
~/.gitconfig
чтобы они выглядели так, как показано ниже, а затемgit status
снова проверить .ИЛИ вы, вероятно, можете добавить более локальный фильтр через
.gitconfig
в корне репо и каким-то образом перезаписать там правила фильтрации для lfs.Надеюсь, это поможет парню.
источник
Я также столкнулся с похожей проблемой, и следующие шаги мне помогли:
Надеюсь, это поможет и другим людям.
источник