为什么我会收到“错误:未能推送一些参考”?

时间:2011-04-14 20:23:33

标签: git

我有一个远程git存储库和我使用的本地存储库。每当我在本地进行任何更改时,我都会将它们推送到遥控器。然后我有时会在远程文件上执行“git commit”来存储远程文件的更改。

我根本不直接编辑远程存储库。我只是提交了更改。我是一个单一的开发者,没有其他人在该回购上工作。

为什么我会得到一个错误,据我所知,这意味着我必须先拉?

我不想拉,因为远程存储库文件已过时,它将丢失我的本地更改。这真的很烦人,为什么会这样呢?如何在不必拉动或重新创建存储库的情况下修复? (正如你所看到的,这有点像版本控制风格的颠覆类型)

编辑 - 错误:

To ssh://...
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://...'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

5 个答案:

答案 0 :(得分:11)

您应该做的是将远程存储库创建为裸存储库。裸存储库只是git repo,没有当前的checkout(也就是说,它就像常规Git仓库中.git目录的内容,所以它包含对象和refs,但它没有文件层次结构的索引或工作副本)。如果您尝试推送到非裸存储库,则工作副本将与提交的内容不同步,并导致您在此处看到的各种问题。

您可以使用git init --bare repo.git创建裸存储库。或者,您可以使用git clone --bare original-repo new-repo.git将现有存储库克隆为裸存储库。

如果要在服务器上签出存储库的副本,则需要在服务器上创建一个新的非裸存储库,然后从您推送到的裸存储库中插入该存储库。

答案 1 :(得分:6)

这始终意味着您没有将远程存储库与本地存储库同步,因此首先应使用命令git pull同步它们,如下所示:

git checkout master    
git pull origin master 

在此过程之后,您将同步它们,然后您可以通过以下方式将更改推送到远程仓库:

git add [filename/directory]  
git commit -m"input your message"   
git remote add origin https://github.com//yourname.git     
git push origin master

答案 2 :(得分:5)

这是另一种选择。

git reset --mixed origin/master
git add .
git commit -m "Your message"
git push origin master

答案 3 :(得分:0)

我遇到了类似的问题,以下命令有效。 git push --set-upstream origin master

答案 4 :(得分:-1)

我也遇到了同样的错误,浪费了很多时间,这是最终的解决方法。

  1. 当使用 git push origin master 时,我们会收到错误消息,因此解决方案是强制执行push。 所以使用第二个选项。它对我有用。

  2. git push origin master --force