git rebase:"错误:无法查看'文件名':权限被拒绝"

393
我正在使用git,并完成了一次小的提交,然后进行了大的提交。我决定在推送前使用git rebase将这两个提交合并。 (我以前从未这样做过。) 所以我做了以下操作: git rebase -i HEAD~2 这使我进入编辑器,在那里我选择选取较早的提交并压缩后面的提交。当我保存时,git会显示: 错误:无法访问 '文件名':权限被拒绝 无法应用sha1值为...的提交 现在: - 当我执行git log时,两个提交都没有出现。 - git status 告诉我“当前没有任何分支”。 - 一个文件被列为已修改并处于索引中,两个文件被列为未跟踪。我的第一个提交只有一个文件(我想),而我的第二个提交有十几个文件。 发生了什么事?如何解决?

12
你是否在Windows上使用Git? - CB Bailey
2
你正在运行病毒检查器吗?有时候质量较差的病毒检查程序会导致这样的问题。 - Greg Hewgill
55
我在使用git checkout时遇到了问题(因此无法像被接受的答案建议的那样中止操作),但关闭所有的IDE后,问题得以解决。第二个答案应该是被接受的答案。 - plus-
2
@IanGrainger,你提到的答案是在被接受的答案发布八个月后发布的。我需要每隔几个月访问所有问题并潜在地更改它们的被接受的答案吗?投票按钮存在是有原因的。如果最受欢迎的答案比被接受的答案更有帮助,那么请使用它。谁会阻止你呢?但我接受了我所接受的答案,因为它对我有帮助,而我是提出问题的人。 - Ryan Lundy
我见过的最愚蠢、无用、毫无意义的错误信息。 - garryp
显示剩余5条评论
36个回答

717

尝试关闭任何打开该文件夹的程序,例如编辑器、资源管理器窗口、命令提示符和FTP软件等。在Windows上,这通常可以解决问题。


82
我遇到了同样的错误。我只是关闭了Visual Studio,然后一切都正常了。 - jacobsimeon
7
在我想起背景中隐藏的WinLess LESS->CSS转换器之前,我关闭了所有我能想到的东西。 - Michael Martin-Smucker
7
当我试图合并代码时,Visual Studio占用了一个NuGet包,关闭VS后问题得以解决。 - CodeHxr
8
我在Windows上看到的这个错误最常见的原因是Visual Studio锁定了文件。按照规定,在切换分支、合并等操作之前,请先关闭VS。 - longda
7
回答Atom的“我也是”。它似乎会锁定文件和目录;关闭它可以解决这个问题。 - ajm
显示剩余19条评论

313

只需关闭你的集成开发环境(如Visual Studio、Atom等),它可能会起作用


3
在IntelliJ中,停止运行Tomcat服务对我很有用。这比重新启动IDE要稍微容易一些。 - Phil Carter
我也打开了一个 Git Bash 窗口 - 关闭它对我有用。 - Vince I
任何值得一用的集成开发环境都不应该将任何东西锁定在代码库中... 点赞!! - LightCC
在Windows 10上使用Atom检出到临时分支后,我遇到了这个问题。关闭并重新打开Atom解决了我的问题。 - mickburkejnr

215

我只在Windows上看到过这个错误,它似乎意味着在尝试应用补丁时,有某些东西阻止了git修改文件。

Windows倾向于在不必要的情况下给进程独占访问文件,过去病毒检查器一直是怀疑的源头之一,但我从未证实过这一点。

可能最容易的方法就是放弃并重试,希望下次不会出现这种情况。

git rebase --abort

你可以尝试使用 git apply 和对 git 尝试执行的提交进行了解,然后执行 git rebase --continue,但老实说我不建议这么做。大部分情况下,我见过尝试这么做的人都有超过一半的概率会意外地漏掉或弄错一些东西。


7
@Kyralessa:嗯,你试过重启吗?如果有什么东西一直锁定了那个文件,那么在重启之后(或者采取稍微不那么激烈的措施来释放该文件),你应该能够使用 git checkout -- previously-locked-file 并回到正常运行状态。 - CB Bailey
57
嗯,我仍然不确定到底发生了什么,但据我所知,VS 2010锁定了该文件(奇怪的是它是一个.xml文档文件)。Process Explorer没有发现任何锁定该文件的内容,但在我退出VS之后,我能够使用git checkout将文件恢复(在git status中它被删除了),现在一切都回到了重组/压缩之前的状态。也许我应该再试一次,尽管此时我感到有点恶心。 - Ryan Lundy
3
多个月后的跟进:我再也没有遇到这个问题了。Rebasing已经运行良好,包括交互式rebasing。这可能只是一个短暂的VS文件锁定故障。 - Ryan Lundy
56
关闭 Visual Studio 2010 对我也起了作用,问题解决了。 - Trev
5
Atom 似乎也会锁定文件。重新启动后问题得以解决。 - Augustin Bralley
显示剩余12条评论

24

当我在我的电脑上看到这个问题时,它比仅仅是“一些进程已经打开了文件”更严重。实际文件的所有权被损坏到一个地步,我(以管理员身份运行)只有在重新启动后才能访问它。

我最接近的推断是,IIS 是问题的一部分。如果我在需要修改许多文件的两个主要分支之间切换,git 会在 IIS 正在处理某个操作或另一个操作时删除一个文件或目录(通常是 DLL 文件)。此时,IIS 进程会自动用一个被锁定且似乎属于无人所有的版本覆盖磁盘上的文件。

此时停止 IIS 是不起作用的。我发现的最佳方法是重新启动,并记得在将来跨主要分支进行更改之前停止 IIS。

我知道这并没有真正回答这个问题,但对其他人可能有帮助。


嗨,Mike...我们遇到了完全相同的问题,但它突然出现了。我们在许多使用IIS运行的项目中使用相同的过程,从未遇到过问题。然而有一天,它开始发生...令人困惑和沮丧。自你写这篇文章以来,你学到了更多吗? - Ethan Brown
感谢你的见解,Mike。在我的情况下,使用一个具有不同绑定URL的ASP.NET MVC项目检出旧分支导致Visual Studio和IIS锁定了该项目中的一些文件。停止IIS中适当的应用程序池可以解除锁定。 - fundead
对我来说,IIS也是罪魁祸首;当这种情况出现时,快速执行“iisreset”似乎可以释放文件锁定。 - alexm
我发现 OneDrive 也会出现同样的问题:在存储在 OneDrive 中的仓库中切换分支会让它变得混乱不堪。 - CharlieB
这也发生在我的Win10上,需要重新启动,但我没有测试iisreset的解决方案。 - qdread

22
如果使用VSCode,请关闭终端并打开新的终端。 否则,可能需要关闭终端。

1
这就是了,看起来像是进程被锁定或者其他什么问题。 - Mike Upjohn
1
还在IntelliJ中提供了帮助。 - Fenio
1
重新打开WebStorm帮了我。 - shutsman

18

在Windows系统中,可能是TortoiseGIT进程阻塞了这些文件。 打开任务管理器并结束TGitCache.exe进程。


2
虽然我没有使用TortoiseGit,但这个信息还是很有用的;我只使用命令行。 - Ryan Lundy

14

我刚刚偶然发现了这个答案串 - 这个错误是一个虚假的错误。

错误: 无法对 'reddit/app/views/links' 进行状态统计:权限被拒绝

这就是我得到的所有信息 - 当我试图合并时。我读了几个答案,然后意识到 - 我所要做的就是关闭我的代码编辑器(Atom)。

一旦关闭编辑器 - 我再次运行“git merge”,然后嗖,它起作用了。

多么无意义的错误:(


谢谢!并不是每天都能在列表中看到“正确”的答案。我建议将其标记为正确答案。解决真正的问题比放弃当前操作更有意义。 - Nikhil Kuriakose

10

如果你使用的IDE(集成开发环境)可能也会成为干扰因素。这就是我使用QtCreator时遇到的问题。


这在我使用 PhpStorm 时也发生过。重新启动后,问题就解决了。 - lancemonotone

10

这种情况有时会在Windows操作系统下发生。

错误: 无法查看文件“filename”: 拒绝访问。

通常情况下我会同时打开多个bit bash实例,而其中一个git bash实例所在的目录在我正在拉取的远程分支中不存在。

关闭除一个之外的所有git bash实例可以解决我的问题。


8

如果您正在运行webpack,请关闭它。同时关闭您的IDE。这些操作完成后,应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接