使用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
我怎样才能清理呢? (在开始同步之前,我没有任何本地更改。)
似乎无法重置头..
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'.
看起来像下面的过程对.git\index
文件有一个锁:
ssh-agent.exe C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe
我杀了这个进程,然后运行git reset HEAD
,看起来我现在恢复了正常。
我的解决方案是重新创建index
(同时保持工作树完整):
del .git\index git reset --mixed head
放弃本地更改,去
git reset HEAD
然后检查你的旧提交,删除新的,并再次拉。
git checkout "hashOld" git branch -d "hashNew" git pull
我和Git有类似的问题。 我的解决方案是通过Windows资源管理器本地删除解决方案,然后重新克隆存储库。 这删除了我的机器本地存储的所有文件,并导致了
Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y
离开。 在克隆版本库后,我再次尝试了我的命令(在我的例子中是GIT COMMIT),并且没有再次发生。
当我试图解决合并功能分支到开发分支后发生的合并冲突时,问题出现了。
Git 2.10(2016年第三季度,4年后)应该改善Windows的状况
参见Ben Wijen( Ben
)的 提交05d1ed6 (2016年8月23日) 。
mingw
:确保临时文件句柄不mingw
进程继承当索引被锁定并且子进程继承所述锁的句柄并且父进程想要在子进程退出之前移除锁时,在Windows上存在一个问题:它不起作用,因为如果进程持有文件不能被删除对他们的处理。
症状:
Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed. Should I try again? (y/n)
使用
bInheritHandles==FALSE
子进程将无法工作,因为没有文件句柄会被继承,甚至不会在STARTUPINFO
(stdin / stdout / stderr)中使用hStdXxx
句柄。使用
O_NOINHERIT
打开每个文件都不起作用,例如git-upload-pack
需要继承的文件句柄。这给我们留下了唯一的出路:用
O_NOINHERIT
标志创建临时文件。 但是,此标志是特定于Windows的。
出于我们的目的,它相当于O_CLOEXEC
(在Windows上不存在),所以让我们用O_CLOEXEC
标志打开临时文件,并将O_CLOEXEC
标志 映射到Windows上的O_NOINHERIT
。
要么杀死正在锁定文件的进程,要么是新的回购,删除.git文件夹rm -rf .git
,然后用git init
在一个存储在Google云端硬盘文件夹中的项目中运行git reset HEAD
时,我连续多次得到这个错误,但几分钟后问题就消失了。
我删除了index
和index.lock
(在.git
文件夹),并运行git checkout .
以撤消更改和解决,但如果我想提交更改,我会运行git add -A
git commit -m "description"