推送GitHub时出现错误-更新被拒绝,因为已推送的分支尖端落后于其远程。

16

我有一个问题,无法将代码推送到另一个Heroku远程仓库。

为了自行检查,我将整个项目目录重命名为_backup,然后执行如下操作:

git clone account/repo_name

git remote add repo2 git@heroku.com:repo2.git

git push repo2 branch_abc:master

但我仍然在收到

hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and merge the remote changes
hint: (e.g. 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我尝试了几个stackoverflow上的问题和答案,但对我没有用,仍然无法解决错误。

3个回答

42

如果您不关心repo2中目前的内容,并且有信心完全覆盖它是可行的,那么您可以使用:

$ git push -f git@heroku.com:<heroku repo name>.git

请记住,push -f 可以擦除其他开发人员的更改(如果自您上次从 repo 拉取以来已发布)...因此,在多开发人员团队中始终要极度小心使用!
在这种情况下,Heroku 始终是下游,而 GitHub 是代码的管理和维护位置,因此在 Heroku 上执行 push -f 成为更安全的选项。


这将使用您的本地仓库覆盖远程 Heroku 仓库。 - uday
它在某些情况下会自动合并。 - Amin.Qarabaqi

7

我一直是使用git pull --rebase和git push origin master的忠实粉丝。在我工作过的一些地方,很多地方不允许使用push -f(特别是使用bitbucket的地方)。

git pull --rebase 
git push origin master

重新设置基础分支会在远程分支(在线网站)之后应用您的更改。此视频详细介绍了您遇到的问题,并使用git pull --rebase解决它。 https://youtu.be/IhkvMPE9Jxs?t=10m36s

如果我使用“git pull --rebase”,那么我的最近的本地更改会丢失,对吗?但是我想保留最近的本地更改。 - MD Habibur rahman

6
如果您先拉取另一个仓库:
git pull repo2
这将合并其他仓库的更改,您可以添加和提交。
然后您就可以将仓库推回去。

1
是的,我偶尔会这样做。但为什么会发生这种情况呢?而且,更改似乎总是空白的。“显示零个更改文件”。 - holden
我猜测这是因为repo2之前就存在了,可能只是一个框架。如果是这样的话,你需要使用git pull命令拉取框架文件,并将其与新的更改合并。然后再进行推送即可。或者,如果你确信旧代码不相关,可以使用git push -f命令。 - Michael Durrant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接