压缩本地提交后推送到远程分支失败

5

我在一个分支上提交了三个commit并将它们都推送到了远程仓库。然后我需要压缩这些commit,所以我使用了以下命令:

git reset --soft HEAD~3 && git commit
git push --force

在第二行,我遇到了致命错误:

The current branch [BRANCH-NAME] has no upstream branch.
To push the current branch and set the remote as upstream.

我尝试使用建议的命令 git push --set-upstream origin [BRANCH-NAME],但被告知当前分支的顶部落后于其远程对应分支。回头看,这很有道理,因为我目前在本地分支的索引1上,而远程的头部在索引3上。

现在我想做的基本上是让我本地拥有的压缩版本的分支替换远程的未压缩版本。这里正确的方法是什么?

我看了一些文章,比如这个,但它们没有帮助。

2个回答

7
您需要在建议的命令后添加--force参数:
git push --set-upstream --force origin [BRANCH-NAME]

在使用了 --set-upstream 参数运行之后,你以后只需要直接输入 git push (必要时也可以输入 git push -f)。


强制推送不会影响分支之外的任何内容,对吗?我是唯一在这个分支上工作的人,但有很多人在主分支上工作,我不想影响他们的工作。 - NeonBlueHair
不,因为你指定了分支名称,只有该分支才会被推送。只是别把master作为分支名称输入即可 ;) - jonnystoten
看起来这个有效了。真是救命稻草,非常感谢! - NeonBlueHair

1
你需要重写git历史记录,因为这些更改已经提交到远程。通常情况下,除非绝对必须这样做,否则应避免重写历史记录。有微不足道的提交并不是将推送的提交压缩的理由。如果它们可以保留,则让它们保留。
对于git远程仓库,如果您确实希望进行操作-我假设您知道如何在本地仓库上压缩提交(git rebase -i很简单)。在压缩后,使用-f进行推送-强制推送。

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