Git在修改提交后阻止推送。

65
通常情况下,我只是运行
git add file
git commit
git push

但如果我在推送之前通过git commit --amend修改提交的内容,则下一次推送将失败。

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我该如何让 git 推送更改而不合并分支?我只有一个分支 (master),而且我是唯一使用此仓库的人,那么为什么它会显示这个消息?

git branch -a:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

编辑:使用gitk HEAD @{u},我发现我有2个分支,一个包含原始提交,另一个包含修改后的提交。


1
可能是重复的问题:如何将修改后的提交推送到远程git仓库? - Deebster
@Deebster,你提供的问题是关于修改已经推送到远程仓库的提交记录,而我要修改的是还没有被推送的提交记录。 - kiri
git add file git commit -m "something" git commit -m "something else" 可以正常工作 - Sagar Sakre
不会创建任何分支,也不会进行修改。git branch -a 的输出是什么? - Sagar Sakre
@Sagar 我在我的问题中添加了输出 - kiri
显示剩余3条评论
4个回答

89

只有在修改已经推送的提交时,才应该出现这种情况。通常情况下,您不应该这样做,因为这样会修改已发布的历史记录。但在您的情况下,您可以尝试使用push -f,它会用您修改后的版本覆盖远程提交。


1
无法感谢@joey足够了,正是因为他我浪费了过去几分钟的时间,是他解决了这个问题。 - Robins Tharakan
5
注意 - 如果不谨慎使用 git push -f <remote> <branch>,会覆盖您的提交历史记录,如果出现问题将无法撤销提交。 - markroxor
@markroxor 是的,不必使用-f命令。因为这会覆盖所有先前的提交。这是一个破坏性操作。 - doğukan
1
我在 push 之后也错误地进行了修改(ammend)。@markroxor,如果 -f 不是好的解决方案,你能否提供一个解决方法呢?这将非常有帮助。 - foob.ar
1
如果出现问题,您将无法撤销提交。找到一个没有从远程拉取的人。 :/ - markroxor
@markroxor 或者在其他位置再次拉取。 - Meet Sinojia

32

是的,你不应该这样做(推送一个提交,然后更改它并再次尝试推送它)。

相反,你可以将 Git 回滚到之前的提交,而不改变文件,然后创建一个新的提交:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be an amendmend"
git push origin master

这将创建一个新的提交,并包含您即将修改的更改。


但是在第一次运行git push之前,我已经运行了git commit --amend - kiri
1
在你遇到问题之前,远程仓库中是否有任何推送的提交? - Stefano Falasca
非常感谢。git pull 对我来说无法工作,但是 git reset --mixed origin/master 让它工作了。 - Sassy Llama
1
这应该是更好的答案。被接受的那个可能会有破坏性。这个更好。谢谢。 - foob.ar
如果您的组织修改了您的权限,则最佳答案可能无法使用 -f。因此,在我的情况下,这个答案更好。 - Brndn

10

你修改了已经提交的代码,就像这样:

git pull origin master
git commit -a --amend -m "..."
git push

您可以通过还原已修改的提交来解决该问题:

git reset --mixed origin/master

然后将其再次制作为一个完整的提交


你的意思是什么?我在推送更改之前已经修改过了。 - kiri

0

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