git推送到远程主分支

时间:2012-07-27 03:33:47

标签: git

我有一个远程和本地git存储库 本地存储库是从远程克隆的 当我修改本地存储库并提交到主分支时 然后我将“ git push ”运行到远程存储库 但它失败并输出以下信息。

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 t
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int
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 som
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, se
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

我“git checkout -b current”远程存储库中的另一个分支 在我的本地存储库中,我运行“git push”然后成功 但是本地修改仅推送到远程主分支 然后我应该在远程存储库中运行“git merge master”来进行更改。

我是git的新手 我做错了吗?

3 个答案:

答案 0 :(得分:7)

远程存储库不是裸存储库,并且已检出主存储库。并且,默认情况下,git不允许您推送到非裸仓库的签出分支。

您推送的远程回购应该理想地设置为裸仓(git init --bare)。

答案 1 :(得分:2)

manojlds的回答是正确的,但是了解远程回购的目的可能会有所帮助。

  • 如果远程仓库仅用于备份/协作目的 - >你有正确的想法,只需用'裸'替换远程仓库并从那里开始。
  • 如果远程仓库是生产服务器,那么你做错了 - >你应该有不同的配置。

一个很好的确认,以便你可以“推向生产”是为了备份/协作目的而拥有你的“裸”仓库,然后你有一个单独的仓库,它在部署服务器上设置并从裸仓库克隆。然后在裸仓库上你可以放一个'post-receive hook',这使得部署仓库可以拉动。

我确信有关于如何做到这一点的指南...我自己跟踪了一次:)

答案 2 :(得分:1)

当我刚接触github时,我的导师给了我这个拇指规则:

在本地修改代码。在提交时,请执行以下操作:

  1. 执行git pull(将远程仓库的内部引用标头同步到本地存储库非常重要)
  2. 如果不同文件中存在任何冲突,请通过打开Kdiff中的两个文件,选择您的副本或远程复制或两者的混合来仔细合并它们。一旦解决了所有冲突,就推动合并。
  3. 在第2步之后,执行git push以保存您对首先要提交的代码所做的本地更改。
  4. Subversion可能很痛苦,但保持同步非常重要。 这些规则帮助我维护了使用github的子版本。 希望这有帮助。

相关问题