小编典典

Git Push错误:拒绝更新签出的分支

all

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

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'

有谁知道可能导致此错误的原因?


阅读 70

收藏
2022-06-07

共1个答案

小编典典

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

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

裸存储库没有工作副本,您可以推送到它们。这些是您在 Github 中获得的存储库类型!如果要创建裸存储库,可以使用

git init --bare

所以,简而言之, 你不能推送到非裸存储库
(编辑:好吧,您不能推送到当前已签出的存储库分支。对于裸存储库,您可以推送到任何分支,因为没有一个被签出。虽然可能,但推送到非裸存储库并不常见) .
您可以做的是从其他存储库中获取和合并。这就是pull request你可以在 Github
中看到的工作方式。你要求他们从你身边拉开,而不是强行推入他们。


更新 :感谢 VonC 指出这一点,在最新的 git 版本(当前为
2.3.0)中,推送到非裸存储库的签出分支是可能的。尽管如此,您仍然不能推送到
的工作树,这无论如何都不是安全的操作。

2022-06-07