在执行git commit --amend命令后,出现Git不快进错误

3

我使用了git commit --amend来修改之前的提交。然后当我推送我的更改时,由于“不是快进”错误而被拒绝。我已经寻找答案。不幸的是,像git pull --rebasegit fetch origin这样的命令都无法解决问题。如果我的本地repo中没有冲突,那么为什么我的推送失败了。

2个回答

6

永远不要修改或变基已经发布的提交!

如果你发布了一个提交并且其他人获取了它,那么这个提交会一直存在。当你修改或者变基时,你会创建一个新的提交并忘记旧的提交。但是,当其他人已经有了旧的提交时,它将不会被更新。因此,当他们后来合并时,这两个版本的提交将合并导致混乱。

通过这个错误,git 防止你无意中推送已经发布的修改版本。

有一些例外情况。如果你正在推送到没有人使用的备份,你可以在那里推送新的历史记录(称为倒回)。而如果有一个分支被宣布为被倒回(例如 git 的 "pu" 分支和所有尚未进入 "next" 的主题),明显可以进行倒回。

如果你确定这样做不会引起问题,你可以告诉 git 继续倒回,方法如下:

git push -f

如果远程配置为镜像,则默认也是如此。

请注意,某些存储库可通过钩子进行配置,以禁止倒带或无论如何禁止倒带某些分支。


这是否意味着我们永远不应该使用 git rebase -i 命令来“压缩”已经推送到远程仓库的一系列提交? - dgnuff
@dgnuff,压缩是一种修正或变基的方式,因此它确实会影响(除非上述情况例外)。 - Jan Hudec

2
这是因为该提交已经存在于远程仓库中,所以您需要 重写历史
这意味着您需要进行强制推送:
git push -f

但是要小心,如果你正在与他人合作,他们可能会遇到麻烦,因为改写历史并不是一件好事。

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