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

Push to remote branch failing after squashing local commits

我向一个分支提交了三个提交并将它们中的每一个都推送到远程。然后我需要压缩提交,所以我使用了:

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 上,而 head 在远程分支上的索引 3 上。

我现在想做的基本上是用分支的压缩版本(我在本地)替换远程中的非压缩版本。这里正确的方法是什么?

我查看了 this 和其他几个,但他们没有帮助。

您需要重写 git 历史记录,因为这些更改已提交到远程。一般来说,除非绝对必要,否则避免重写历史。进行琐碎的提交并不是压缩推送提交的理由。能留下就让他们留下。

对于 git 远程仓库,如果您确实希望继续 - 我假设您知道压缩本地仓库上的提交(git rebase -i 很简单)。压扁后,用 -f 推 - 力推。

您需要将 --force 添加到建议的命令中:

git push --set-upstream --force origin [BRANCH-NAME]

--set-upstream 完成 运行 之后,您就可以从那时起只输入 git push(或必要时输入 git push -f)。