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

Spy*_*ros 10 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.
Run Code Online (Sandbox Code Playgroud)

Bri*_*ell 11

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

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

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


小智 7

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

git checkout master    
git pull origin master 
Run Code Online (Sandbox Code Playgroud)

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

git add [filename/directory]  
git commit -m"input your message"   
git remote add origin https://github.com//yourname.git     
git push origin master
Run Code Online (Sandbox Code Playgroud)


小智 6

这是另一种选择.

git reset --mixed origin/master
git add .
git commit -m "Your message"
git push origin master
Run Code Online (Sandbox Code Playgroud)