Eclipse上的EGit:如何进行git push --force操作?

15

我遇到了一个问题,我的origin/分支与本地分支不同步,如下所示:

我的提交历史

当我尝试从本地的“staging”分支PUSH到origin/staging分支时,会出现“rejected - non-fast-forward”错误。

我使用Windows PC上的Eclipse和EGit模块。

这里的另一篇帖子中,我发现可以通过使用“git push --force origin staging”来解决我的问题,以覆盖origin/staging分支。

然而,在EGit中我没有看到这个选项,也不知道如何在EGit中打开控制台来执行此操作?

有人知道我是否可以在EGit中完成这个操作吗?

好的,我解决了自己的问题。似乎我有未推送回origin/staging的提交问题。在这里找到了使用“git reset XXX : without --hard”的概述,它会重置分支标记,但保留本地更改以便稍后重新提交。

谢谢,Jason

3个回答

31

我刚遇到了类似的问题,这是我所做的:

  1. 团队 -> 推送分支 <分支名称> ...
  2. 如果远程存在且已发生分歧,则强制覆盖远程分支

5

您确定要覆盖远程分支并丢失所有这些提交吗?

如果远程分支上有本地分支中没有的提交,您应该在推送之前将它们合并到本地分支中。

例如,在本地 staging 分支上:

git merge origin/staging

然而,如果你确定,我建议你在推送refspec时勾选“强制更新”选项。
这有点复杂,但EGit用户指南在讨论推送到其他存储库时解释了它,提到“强制更新”选项的具体部分在推送Ref规范的章节中。 编辑0:关于你的合并失败,我还没有遇到过完全失败而不是导致冲突的合并,看起来这可能是一个已知问题

我同意,拉取和合并是更好的选项,但正如我上面所述,它们失败了? - Jason

0
如果你进行强制推送,你将会失去在修复头部缺失 Location 字符串后添加到 origin/staging 的所有内容,并且会破坏其他人的分支。我认为这不是你想要的。你可能想先进行一次拉取,然后推送就可以正常工作了。

值得注意的是,pull 操作会尝试自动合并,如果成功了,一切都会正常工作。如果不成功,用户必须手动合并,提交更改,然后才能继续操作。 - eis
1
合并失败消息:使用解决策略将修订版本4092d67bbfda43148cc078674f2f2738720caade、5df2879b3ecf2b7d0e1d0209a1f7862ce6f5aa9b与基础版本8643195cd4a8391497469a92d627ef5cf8480e13合并的结果为:失败。 - Jason
如果您无法将远程分支合并到本地分支中,正如您的评论所指示的那样,我建议您应该解决这个实际问题并提出一个新的问题来解决它,但这也可能是EGit中的一个错误。 - chrisbunney

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