62

使用 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'.
4

23 回答 23

37

看起来以下进程锁定了.git\index文件:

ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe

我终止了进程并运行git reset HEAD,看起来我现在恢复正常了。

于 2012-11-29T22:41:37.053 回答
32

就我而言,这是由于在管理员和非管理员命令提示符下使用相同的 Git 存储库造成的。lastgit pull来自 admin cmd 时,index是由它创建的,然后非 admin cmd 没有足够的权限对​​其进行修改。

我的解决方案是重新创建index(同时保持工作树完好无损):

del .git\index
del .git\index.lock
git reset --mixed head
于 2017-03-30T02:25:15.707 回答
29

就我而言,我必须关闭WSL Ubuntu 终端打开的VS 代码。code .

于 2020-04-25T23:32:59.360 回答
8

这可能是一个真正的问题,请尝试以管理员身份而不是用户身份运行您的终端。为我工作

于 2018-12-03T09:55:18.083 回答
6

Rename from '.git/index.lock'...我在尝试执行时看到此消息

git checkout -b my-branch

对我来说,解决方法是将命令行作为admin.

具体来说,我以非管理员身份使用出色的cmder应用程序,导致出现重命名消息。通过以管理员身份运行cmder,然后再次执行结帐,它工作正常。

于 2018-07-12T11:15:11.613 回答
4

Git 2.10(2016 年第三季度,4 年后)应该会改善 Windows 上的情况

请参阅Ben Wijen ( )的提交 05d1ed6(2016 年 8 月 23 日) 。Ben

mingw: 确保临时文件句柄不被子进程继承

当索引被锁定并且子进程继承了所述锁的句柄并且父进程想要​​在子进程退出之前移除锁时,在Windows上会出现一个问题:它不会工作,因为如果进程持有则无法删除文件处理它们。

症状:

Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)

生成子进程bInheritHandles==FALSE将不起作用,因为不会继承任何文件句柄,甚至不会继承(stdin/stdout/stderr)中的hStdXxx句柄。STARTUPINFO

打开每个文件O_NOINHERIT也不起作用,例如git-upload-pack期望继承的文件句柄。

这给我们留下了唯一的出路:创建带有O_NOINHERIT标志的临时文件。但是,此标志是特定于 Windows 的。
出于我们的目的,它等价于O_CLOEXEC(在 Windows 上不存在),所以让我们打开带有标志的临时文件并将该O_CLOEXEC标志 映射O_NOINHERITWindows 上

于 2016-08-26T06:17:32.300 回答
2

要放弃本地更改,请转到

git reset HEAD

然后检查你的旧提交,删除新提交,然后再次拉取。

git checkout "hashOld"
git branch -d "hashNew"
git pull
于 2012-11-29T22:01:52.907 回答
2

对我来说这是这个错误:

Rename from 'D:/dev/repo/.git/refs/remotes/origin/my-branch.lock' to 'D:/dev/repo/.git/refs/remotes/origin/my-branch' failed. Should I try again? (y/n)

重命名“my-branch”文件,重试,“my-branch.lock”重命名成功,不确定这是否正确,但有效。保留了 master 和 my-branch 中的本地更改。

于 2020-01-29T13:29:51.817 回答
1

我删除indexindex.lock(在.git文件夹中)并运行git checkout .以撤消更改并解决,但如果我想提交更改,我会在git add -A之后运行git commit -m "description"

于 2017-10-18T19:11:16.320 回答
1

在存储在 Google Drive 文件夹中的项目中运行时,我连续多次收到此错误git reset HEAD,但几分钟后问题就消失了。

于 2017-10-25T13:03:17.873 回答
1

我遇到了这个问题,想为未来的搜索者发布答案。仅 Windows 确认。当我的 git 存储库位于需要提升权限的目录下时,我得到了这个,并且我从一个无权写入该文件夹的进程(cmd.exe)运行 git,因此它无法清除锁定。

答案很简单,以管理员身份运行。

于 2021-03-12T17:30:59.480 回答
1

我已经在一个类似的问题上回答了这个问题。也可以帮助其他人,在这里引用相同的内容:

“如果任何 Windows 用户偶然发现了这一点:

我遇到了同样的问题,因为我分配了所有权限,所以权限并没有解决它。删除 index.lock 也没有帮助。

我尝试使用 WSL 并显示此错误:

另一个 git 进程似乎正在此存储库中运行。

基于此,我退出了 VS Code(即我正在使用的 IDE)运行的每个进程,然后一切恢复正常。

注意:仅仅关闭 VS Code 并没有帮助,必须从任务资源管理器中结束所有进程。

更重要的是,尝试结束您使用 git 的所有进程。对我来说,这只是 VS Code。”

原始答案:https ://stackoverflow.com/a/67615831/13404308

于 2021-05-20T08:01:08.273 回答
0

我对 Git 也有类似的问题。我的解决方案是通过Windows资源管理器在本地删除解决方案,然后重新克隆存储库。这删除了本地存储在我的机器上的所有文件,并导致

Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y

离开。克隆存储库后,我再次尝试了我的命令(在我的情况下是 GIT COMMIT)并且失败没有再次发生。

当我试图解决将功能分支合并到开发分支后发生的合并冲突时,问题就出现了。

于 2016-06-13T20:26:35.243 回答
0

杀死锁定文件的进程,或者如果它是一个新的 repo,删除 .git 文件夹rm -rf .git并重新开始git init

于 2017-01-12T18:50:13.680 回答
0

这是在运行防病毒软件或 OS Defender(例如 Windows Defender)时引起的。解决方案:关闭杀毒软件几分钟让你添加、提交和推送。打开防病毒软件。
它会起作用的。

于 2018-12-22T15:54:22.103 回答
0

我正在使用乌龟 Git。我刚刚打开了一个新的 Windows 资源管理器,它解决了这个问题。(对于命令行 Git 可能只是打开一个新的 shell)。

于 2019-02-26T05:28:52.550 回答
0

当我用 master 重新设置我的分支时,我似乎遇到了问题。我的解决方案是关闭所有正在打开的解决方案,并将我的分支硬重置为原点并再次变基。

于 2019-06-26T07:25:11.640 回答
0

git init解决了我的问题。我遇到了以下问题。

Rename from '.git/objects/pack/pack-XXXXX.pack' to '.git/objects/pack/old-XXXXX.pack' failed. Should I try again? (y/n)

于 2020-03-06T07:23:10.940 回答
0

我更改项目权限

在此处输入图像描述

然后,我退出代码编辑器

于 2021-07-17T08:27:18.440 回答
0

就我而言,我git pull以管理员身份完成了操作,而我的普通用户不再拥有足够的权限。

我的解决方案是将所有权重置为我的普通用户。

  1. 右键单击.git,然后打开Properties
  2. 安全选项卡上,单击高级
  3. Advanced Security Settings的Owner旁边,单击Change(即使它已经正确)。
  4. Select User中,选择普通用户,然后单击Okay
  5. Security选项卡的Owner下,您现在有一个Replace owner of subcontainers and objects复选框 - 选中此项并单击Okay
于 2021-07-22T22:02:17.493 回答
0

我尝试了很多建议。有时,提交会成功,但随后会返回错误。最后,暂停 Dropbox 同步似乎成功了!我不知道 Dropbox 同步如何导致此错误超过几分钟(同步我的 24K 所需的时间.git/index)。

于 2021-12-18T22:29:48.280 回答
0

就我而言,它只是打开了 Windows 资源管理器,它正在打开我想要重命名的目录上方的目录。关闭 Windows 资源管理器后,问题立即消失。

我以管理员身份使用 Bash Git。

于 2022-01-04T19:58:27.803 回答
-1

我将(在 Windows 10 中)整个项目复制到一个新文件夹中。从那里推到原点(当时没有发出索引问题)。然后我又回到了项目目录,问题就出现在这里。删除 .git 目录。重新初始化(git init)。添加到索引 (git add . )。从远程来源获取并合并。这里的所有都是它的。

于 2021-05-30T21:10:45.547 回答