我正在尝试推送到远程仓库,但不断收到以下错误。
$ git push
To user@remote.net:/home/user/repos/remoterepo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'user@remote:/home/user/repos/remoterepo.git'
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.
git remote show origin
显示master pushes to master (local out of date)
。我很肯定它不应该过时,因为我只从分支机构推出。
我有两个问题。
是否可以强制本地分支覆盖远程?拉取将覆盖更改,这些更改肯定会晚于存储库中的内容。
这是我第二次或第三次遇到这个问题。我唯一能想到的是git的本地版本是git version 1.7.3.1.msysgit.0
(在Windows上)而远程版本是git version 1.6.5
(Ubuntu Jaunty)。
是否有可能不同的git版本可能导致一些损坏?
答案 0 :(得分:11)
git push --force
。但是,只有当你完全确定自上次push
以来没有人阅读过回购时这样做(请参阅How do I push amended commit to the remote Git repository?进行深入讨论)。git pull
之前,似乎更像是push
。我不认为这是与时间有关的错误。该消息表明服务器上有更新的提交(由提交哈希标识,而不是提交日期)...要查看,更改了什么,请执行git fetch
而不是git pull
并查看使用git log origin/master
... 更新:与此同时,push
学习了--force-with-lease
选项,确保您不会意外地破坏某些内容:https://developer.atlassian.com/blog/2015/04/force-with-lease/。只要有可能,请优先考虑--force
!