如何解决Git中的问题:“更新被拒绝,因为推送的分支尖端落后于其远程对应物”

12

我试图将提交推送到远程,但收到以下错误消息:

$  git push origin master
To git@git1.eu1.frbit.com:hbrosuru.git
! [rejected]        ab68c0485d -> master (non-fast-forward)
error: failed to push some refs to 'git@git1.eu1.frbit.com:hbrosuru.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
我觉得我可能在将多个本地分支推送到单个远程分支时搞混了,我想基本清除服务器上的内容,并推送一个全新的分支。这种操作可行吗?或者有没有更好的方法来解决这个错误?
附:这个远程分支托管在Fortrabbit上,所以我不能完全访问服务器,无法简单地删除分支并创建一个新的,因为Fortrabbit的部署机制是基于Git的。

git push -f 会生效吗?这将强制使用您正在推送的内容覆盖分支。但是,服务器可能已禁用此功能,因此您需要尝试并查看。 - Isaac Betesh
1
另外,您想要在哪个分支上?请注意这一行:ab68c0485d -> master (non-fast-forward) -- 这意味着您不在任何分支上,因为您当前的 HEAD 是由提交哈希(ab68c0485d)而不是分支名称(master)引用的。如果您想要将当前的 HEAD 作为新的主分支,请使用 git branch -f master ab68c0485d && git checkout master,然后尝试推送。 - Isaac Betesh
可能是 https://dev59.com/NWkv5IYBdhLWcg3w3Ug0 的重复问题。 - Adil
1个回答

13

我希望基本上清除服务器上的内容,并从新的整个分支推送。

这通常意味着进行 强制推送请注意,强制推送通常不是安全的操作,特别是在像 GitHub 这样的共享源代码库中推送时应该尽量避免。但在这种情况下,您需要更新 PaaS 服务器,这很可能是可以接受的。

在强制推送之前,您可能希望使用 gitkgit log --all --graph --decorate 或其他工具以图形方式可视化您的分支,以确保一切都符合预期。

要将您的本地 master 分支强制推送到您的 origin 远程的 master 分支,请运行:

git push --force-with-lease origin master:master

--force-with-lease参数将仅在本地分支相对于要推送的分支是最新的情况下才会导致强制推送成功。(这可以防止意外覆盖您不知道的提交。) 我强烈建议尽可能使用with-lease变体,而不是不太安全的旧的--force参数。


3
为了重申一下,如果你只是因为一般错误进入了这里,那么你很可能不需要强制推送,除非你像 OP 一样处于特殊情况。如果你正在与多个人共享一个仓库,并遇到了这个错误,有很大的可能性是你落后了,应该首先拉取远程分支,解决任何合并冲突,然后再推送。 - Sean
我曾经遇到过类似的问题。我是唯一使用给定存储库的人,最终我放弃了一个变基并强制推送(-f),然后我又回到了正轨。 - M. K. Hunter
即使您想要强制推送并使此命令起作用,您的存储库很可能会告诉您“已禁用向此存储库进行强制推送”。因此,您可能需要先检查一下。 - Noumenon
请注意,强制推送通常不是安全的操作。为什么呢?因为我是唯一使用该仓库的人。 - gargoylebident
@stackexchange_account1111,注意“一般”这个词。总的来说,这不是一个安全的做法。对于单个用户来说,风险较小,但仍然不完全“安全”,因为您可能会(在这种情况下,实际上将)丢失提交。也许这正是您想要的,也许不是。 - Chris
我不想这样做,但似乎这是我的唯一选择,因为 Git 存在缺陷,拒绝在拉取后合并冲突(即使我手动合并也是如此)。 - gargoylebident

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