我正在使用git,并进行了一个小的提交,然后是一个大的提交。我决定在推送之前使用git rebase将两个提交压缩在一起。(我以前从未这样做过。)

于是我做了:

我们回来了

这给了我一个编辑器,我选择选择较早的提交并删除较晚的提交。我攒钱的时候,少不要脸的人说:

错误:不能stat 'filename':权限被拒绝 不能为以后的提交应用sha1…提交的初始文本行

Now:

当我做git日志时,也没有提交。 git状态告诉我“当前不在任何分支上”。 一个文件被列为已修改并在索引中,两个文件被列为未跟踪。我的第一次提交只有一个文件(我想),而我的第二次提交有一打。

!发生了什么?我该怎么解决呢?


当前回答

在win10中使用SourceTree,通过关闭Atom编辑器修复了这个问题。

错误重现:

在分支B中,创建一个md文件,使用Atom编辑、保存并提交。 切换到分支A,从服务器上拉下新的提交。 尝试切换回来,哎呀,它说“错误:不能统计‘文件’:权限被拒绝”。

其他回答

当我在我的机器上看到这个时,它比“某个进程打开了文件”更糟糕。文件的实际所有权上升到我(以管理员身份运行)只能在重新启动后才能访问它的位置。

据我所知,IIS是问题的一部分。如果我在两个需要修改大量文件的主要分支之间切换,git会在IIS试图对其进行某些操作时删除一个文件或目录(通常是dll)。此时,IIS进程会自动用一个锁定的版本覆盖磁盘上的文件,该版本似乎不属于任何人。

在这里停止IIS并不能做到这一点。我发现最好的方法是重新启动,并且记住在将来跨主要分支进行更改之前停止IIS。

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

我在Windows 10上,我得到了这个错误,但即使在电脑重新启动并使用管理权限打开后,也没有解决我的问题。

看来问题出在我的存储库特权上。

只是为了确保我安装了所有新的Windows更新 我重启了我的电脑,最后我删除了所有不必要的特权。

以管理员身份运行powershell,执行如下命令:

attrib -s <path_to_your_directory> 
attrib -r -a <path_to_your_directory> 

powershell命令的详细信息如下: https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/attrib

我刚刚遇到了这个问题。问题是-如果你打开了文件,它在rebase之后被删除/替换(你有一个不再有这个文件的分支),git系统就会崩溃。所以我关闭了所有打开的文件,然后尝试在其他分支签出

我只在Windows上见过这个错误,这似乎意味着当git试图应用补丁时,有什么东西阻止了它修改文件。

Windows倾向于在不必要的时候给予进程对文件的独占访问,在过去病毒检查一直是怀疑的来源之一,但我从未最终证明过这一点。

也许最简单的方法就是放弃,然后再试一次,希望下次不会发生这种情况。

git rebase --abort

你可以尝试使用git apply和commit git在做git rebase之前试图做的事情的知识——continue,但说实话,我不建议这样做。大多数时候,我看到这种尝试,有一个比偶数更好的机会,一些东西被不小心错过或搞砸了。

这通常发生在预处理软件/应用程序监视项目时,比如Prepros或Codekit。此外,Atom和Sublime(甚至notepad++)可以导致这种情况发生,如果项目中的文件当前正在编辑。

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