我已经解决了一些合并冲突,提交,然后尝试推送我的更改,并收到以下错误:

c:\Program Files (x86)\Git\bin\git.exe push --recurse-submodules=check "origin" master:master
Done
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To C:/Development/GIT_Repo/Project
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'C:/Development/GIT_Repo/Project'

有人知道是什么导致了这个错误吗?


当前回答

我也有同样的问题,我试着这样做:

Ssh到gitlab服务器(远程服务器机器而不是你的个人机器),发现[core]:bare value is false in yourRepo/.git/config

2. Vim配置并将其编辑为true 现在,它很好。我可以推到大师。

其他回答

当我在阅读progit时,我得到了这个错误。我创建了一个本地存储库,然后在同一文件系统上的另一个repo中获取它,进行编辑并尝试推送。在阅读了NowhereMan的回答后,一个快速的解决方法是转到“远程”目录并临时签出另一个提交,从我所做更改的目录中推送,然后返回并将头部放回master。

原因:您正在推送到非裸存储库

有两种类型的存储库:裸库和非裸库

裸存储库没有工作副本,您可以将其推入。这些就是你在Github中得到的存储库类型!如果您想创建一个裸存储库,可以使用

git init --bare

因此,简而言之,您不能推入到非裸存储库(编辑:您不能推入到存储库的当前签出分支。使用裸存储库,您可以推送到任何分支,因为没有任何分支被签出。尽管可能,但推入非裸存储库并不常见)。你能做的就是从其他存储库中获取并合并。这就是你在Github中看到的拉请求的工作方式。你让他们离开你,而不是强迫他们。


更新:感谢VonC指出这一点,在最新的git版本(目前是2.3.0)中,可以推送到非裸库的签出分支。然而,您仍然不能推到一个肮脏的工作树,这不是一个安全的操作。

对我来说,以下几点很管用:

git config --global receive.denyCurrentBranch updateInstead

我设置了F:驱动器,几乎是整个驱动器,用Git在我的Windows 10台式机和Windows 10笔记本电脑之间同步。最后我在两台机器上都运行了上面的命令。

首先,我在网络上共享了桌面的F驱动器。然后我可以在我的笔记本电脑上运行:

F:
git clone 'file://///DESKTOP-PC/f'

不幸的是,所有的文件最终都在我笔记本电脑的“F:\ F”下,而不是直接在F:\下。但我可以手动剪切粘贴。之后Git仍然在新位置工作。

然后我尝试对笔记本电脑上的文件做一些更改,提交它们,并将它们推回到桌面上。直到我运行上面提到的git config命令,这才起作用。

注意,我在两台机器上的Windows PowerShell中运行了所有这些命令。

更新:在某些情况下,我仍然在推动更改方面遇到问题。我终于开始拉更改,通过在计算机上运行以下命令,我想拉最近的提交:

git pull --all --prune

我解决了这个问题,首先验证该遥控器没有任何检出(它真的不应该),然后使它裸露:

$ git config --bool core.bare true

在那之后,git推得很好。

这对我很有用

git配置——global receive.denyCurrentBranch updateInstead Git push origin master