Git push接收“错误:拒绝更新签出的分支”

时间:2013-06-24 13:38:05

标签: git push

这是我到目前为止所做的:

我成功将我的远程仓库克隆到本地计算机上的新目录。

然后我在工作副本中编辑了一个文件,提交了它,并试图将其推送到远程仓库。这是我得到的错误:

$ git push origin master
root@gohyperspace.com's password:
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 456 bytes | 0 bytes/s, done.
Total 5 (delta 4), reused 0 (delta 0)
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 inconsist
ent
remote: error: with what you pushed, and will require 'git reset --hard' to matc
h
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 root@gohyperspace.com:/var/www/html
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'root@gohyperspace.com:/var/www/html'

您对我如何解决这个问题有什么想法吗?感谢。

这是我当地的Git配置:

$ git config -l
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
merge.tool=tortoisemerge
gui.recentrepo=C:/Users/Chris/Dev/Projects/html
user.email=JazzcatCB@gmail.com
user.name=CBarnhill
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=root@gohyperspace.com:var/www/html
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
user.name=Chris Barnhill
user.email=JazzcatCB@gmail.com
gui.wmstate=normal
gui.geometry=887x427+26+26 171 192

2 个答案:

答案 0 :(得分:4)

消息中的长描述不够清晰吗?

你可以做三件事:

  • 让原始的回购裸露,并推送任何你喜欢的内容
  • 按建议在config中设置receive.denyCurrentBranch以允许推送到签出分支,并处理差异
  • 查看目标仓库中的其他分支

可能甚至强制推动都会起作用,我不建议这样做。

答案 1 :(得分:4)

远程主分支显然处于非裸状态,这意味着任何进入此分支的人都会覆盖已检出的工作副本(对HEAD的引用)的现有状态。这不是一件好事。

要解决此问题,您要么使用裸存储库作为“公共”存储库(使用'git init --bare'执行此操作),要么使用分支机构:

git checkout -b myBranch

在这个分支上做你的工作并提交。然后用'git push origin myBranch'推动你的分支而不必破坏任何东西。之后,您在远程仓库中的分支可以合并或重新绑定到主服务器。