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个回答

7
在Win 10中使用SourceTree时,通过关闭Atom编辑器解决了问题。
错误重现步骤: 1. 在分支B中创建一个md文件,使用Atom编辑它,保存并提交。 2. 切换到分支A,从服务器拉取新的提交。 3. 尝试切换回分支B,出现"error: cannot stat 'file': Permission denied"错误提示。

7

当你使用SublimeText时,如果弹出的让你购买该程序的窗口没有关闭,也会发生这种情况。


1
只需在Atom中打开项目/文件树,就可以轻松获取它。 - Hal
1
和@Hal一样,我的问题也出在Atom上。这是因为一个分支中的文件夹在另一个分支中不存在。关闭Atom可以解决这个问题,但你也可以折叠项目树(隐藏文件夹),这也可以起到同样的作用。 - jsalwen

6

在使用IntelliJ集成终端进行rebase时,我遇到了Windows系统的问题。我发现我同时运行了Git bash客户端实例。

关闭Git bash解决了这个问题。


6

当你的项目中有预处理软件或应用程序(例如Prepros或Codekit)时,这种情况经常会发生。另外,Atom和Sublime(甚至Notepad++)如果正在编辑项目中的某个文件,也可能导致此问题发生。

解决这个问题最简单的方法是关闭打开项目文件的任何程序,合并你的分支,然后重新打开它们以刷新。这也将避免任何程序不再意识到已发生的更改,并强制你手动刷新项目的任何问题。


1
哦,天啊!我在后台运行elm-live。这让我省了很多麻烦。 - frostymarvelous

5

尝试关闭一些集成开发环境,例如Sublime、VS Code、Webstorm等,以及关闭打开有文件夹的程序,例如CMD、Powershell、CMDer、Terminal等,将修复该问题。


1
我在打开 Visual Studio 2019 时遇到了这个错误消息。当我关闭它后,错误就消失了。 - Jean Libera

4

我刚在Win 7下遇到了这个问题。

$ git stash pop error: cannot stat 'parentFolder/subfolder': Permission denied error: cannot stat 'parentFolder/subfolder': Permission denied

诊断:

1>我进入子文件夹,它确实存在,但我无法删除它!

2>使用"process explorer" ->查找 ->查找句柄和Dlls->把"subfolder"名称放在那里并搜索。

结果:原来是XMLSpy打开了其中一个xml文件,关闭XML Spy并再次尝试stash pop,现在它可以正常工作了。


4
除了其他答案所说的关闭所有可能锁定目录的应用程序之外,另一个解决方案是使用一个工具来解锁文件/目录而不需要关闭一切。(我讨厌需要重新启动 Visual Studio)
LockHunter 是我使用过的一个工具:https://lockhunter.com/ 可能还有其他类似的工具,但这个工具对我非常好用。

4

我曾经遇到过类似的问题。但是解决起来非常简单。 在Windows机器上,我的文件资源管理器打开了一个存在于一个分支中但另一个分支中没有的文件夹。 关闭文件资源管理器即可解决问题。


2

我刚遇到了这个问题。问题在于,如果你打开了一个文件,在rebase之后该文件被删除或替换(你的分支不再有这个文件),git系统就会出现错误。因此,我关闭了所有打开的文件,然后尝试在其他分支上进行checkout操作。


2
我同意上面的“关闭Visual Studio”答案。
然而,即使在我关闭了Visual Studio之后,我还需要手动在任务管理器中结束“devenv.exe” Visual Studio进程。完成此操作后,我可以再次在gitbash中运行以下命令:
git pull
这样,“无法统计文件名”错误就消失了。这可能是由于Visual Studio扩展程序在关闭后仍保持进程打开时间过长所致。

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