Git переименовать из index.lock в индекс не удалось
Используя клиент GitHub Windows, я выполнил синхронизацию, чтобы удалить удаленные изменения на моем локальном компьютере, но до завершения синхронизации у меня закончилось свободное место на диске, и синхронизация завершилась неудачно. Теперь у меня, похоже, есть куча локальных изменений, которые на самом деле являются изменениями, которые вытаскивались из источника. Я попытался запустить git pull, но получил:
C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git pull
Updating b3a86e1..5afd74f
error: Your local changes to the following files would be overwritten by merge:
SourceLog.Interface/IChangedFile.cs
SourceLog.Interface/ILogEntry.cs
...
Please, commit your changes or stash them before you can merge.
error: The following untracked working tree files would be overwritten by merge:
Lib/MSBuildExtensionPack/4.0.6.0/Ionic.Zip.dll
Lib/MSBuildExtensionPack/4.0.6.0/MSBuild.ExtensionPack.dll
...
Aborting
Итак, теперь я пытаюсь отменить локальные изменения, но получаю:
C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git checkout -- .
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
fatal: unable to write new index file
Как я могу это очистить? (Перед началом синхронизации у меня не было локальных изменений.)
Update
Не может выглядеть как reset head..
C:\Users\Tom\SourceLog [master +4 ~0 -0 !]> git reset head
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
error: Could not write new index file.
fatal: Could not reset index file to revision 'head'.
Ответы
Ответ 1
Похоже, что следующий процесс заблокировал файл .git\index
:
ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe
Я убил процесс и запустил git reset HEAD
и теперь выглядит как нормальный.
Ответ 2
В моем случае это было вызвано использованием одного и того же репозитория Git из командной строки как администратора, так и не администратора. Когда последний git pull
был от admin cmd, index
создавался им, а затем у non-admin cmd было недостаточно прав для его изменения.
Моим решением было воссоздание index
(при сохранении рабочего дерева без изменений):
del .git\index
git reset --mixed head
Ответ 3
Я видел это Rename from '.git/index.lock'...
при попытке выполнить
git checkout -b my-branch
Исправить для меня было запустить командную строку в качестве admin
.
В частности, я использовал превосходное приложение cmder как non-admin, в результате чего появилось сообщение о переименовании. Путем запуска cmder в качестве администратора, а затем повторного выполнения проверки, он работал нормально.
Ответ 4
Git 2.10 (Q3 2016, 4 года спустя) должен улучшить ситуацию в Windows
См. commit 05d1ed6 (23 августа 2016 г.) Ben Wijen (Ben
).
mingw
: гарантировать, что временные файлы не наследуются дочерними процессами
Когда индекс заблокирован, а дочерние процессы наследуют дескриптор указанная блокировка и родительский процесс хотят удалить блокировку до дочерний процесс выходит, на Windows возникает проблема: он не будет работать потому что файлы не могут быть удалены, если процесс содержит дескриптор на них.
Симптом:
Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)
Инициирование дочерних процессов с помощью bInheritHandles==FALSE
не будет работать потому что никакие дескрипторы файлов не будут унаследованы, даже hStdXxx
обрабатывает в STARTUPINFO
(stdin/stdout/stderr).
Открытие каждого файла с помощью O_NOINHERIT
тоже не работает, например. git-upload-pack
ожидает унаследованных дескрипторов файлов.
Это оставляет нам единственный выход: создание временных файлов с флагом O_NOINHERIT
. Однако этот флаг является специфичным для Windows.
Для наших целей он эквивалентен O_CLOEXEC
(который не существует на Windows), поэтому позволяет просто открывать временные файлы с флагом O_CLOEXEC
и сопоставить этот флаг с O_NOINHERIT
в Windows.
Ответ 5
Чтобы отменить локальные изменения, перейдите
git reset HEAD
Затем выполните проверку старой фиксации, удалите новую и снова нажмите.
git checkout "hashOld"
git branch -d "hashNew"
git pull
Ответ 6
У меня была аналогичная проблема с Git. Решение для меня состояло в том, чтобы удалить решение локально через проводник Windows, а затем повторно клонировать репозиторий. Это удалило все файлы, которые были локально сохранены на моей машине, и в результате получилось
Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y
уходит. После того, как я клонировал репозиторий, я снова попробовал свою команду (что в моем случае было GIT COMMIT), и сбой не повторился.
Проблема возникла, когда я пытался разрешить конфликт слияния, который происходил после слияния ветки признаков в ветку разработки.
Ответ 7
Либо убейте процесс, который блокирует файл, либо новый репо, откройте папку .git rm -rf .git
и начните снова с git init
Ответ 8
Я удалил index
и index.lock
(в папке .git
) и запустил git checkout .
, чтобы отменить изменения и разрешить, но если бы я хотел зафиксировать изменения, я бы выполнил git add -A
после git commit -m "description"
Ответ 9
Я получил эту ошибку несколько раз подряд при запуске git reset HEAD
в проекте, хранящемся в папке Google Диска, но через несколько минут проблема исчезла.
Ответ 10
Это может быть правильной проблемой, попробуйте запустить свой Терминал как Администратор вместо пользователя. Работал для меня
Ответ 11
Я использую Черепаху Git. Я только что открыл новый проводник Windows, и он исправил это. (Для командной строки Git, возможно, просто откройте новую оболочку).
Ответ 12
Мне показалось, что проблема была, когда я перебазировал свою ветку с мастером. Мое решение - отключить все решения, которые открываются, и сбросить мою ветку в исходное положение и снова выполнить перезагрузку.
Ответ 13
Причина, когда работает антивирус или защитник ОС (например, Защитник Windows). Решение: отключите антивирус на несколько минут, добавьте, подтвердите и отправьте. Tunr на антивирусе.
Это будет работать.