我有一个远程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.
答案 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)
我也遇到了同样的错误,浪费了很多时间,这是最终的解决方法。
当使用 git push origin master 时,我们会收到错误消息,因此解决方案是强制执行push。 所以使用第二个选项。它对我有用。
git push origin master --force