我已经解决了一些合并冲突,提交然后尝试推送我的更改并收到以下错误:
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'
有谁知道可能导致此错误的原因?
原因:您正在推送到非裸存储库
有两种类型的存储库:裸存储库和非裸存储库
裸存储库没有工作副本,您可以推送到它们。这些是您在 Github 中获得的存储库类型!如果要创建裸存储库,可以使用
git init --bare
所以,简而言之, 你不能推送到非裸存储库 (编辑:好吧,您不能推送到当前已签出的存储库分支。对于裸存储库,您可以推送到任何分支,因为没有一个被签出。虽然可能,但推送到非裸存储库并不常见) . 您可以做的是从其他存储库中获取和合并。这就是pull request你可以在 Github 中看到的工作方式。你要求他们从你身边拉开,而不是强行推入他们。
pull request
更新 :感谢 VonC 指出这一点,在最新的 git 版本(当前为 2.3.0)中,推送到非裸存储库的签出分支是可能的。尽管如此,您仍然不能推送到 脏 的工作树,这无论如何都不是安全的操作。