为什么我不能推送空提交?


35
  git commit --amend --allow-empty

然后

  git push origin master

git说

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

为什么?如何解决这个问题?

git 

Answers:


56

问题不是您要推送空的提交。
这是关于推送与已经推送的一个提交不同的提交(一个具有不同的SHA1)。
就是git commit --amend这样:它修改了最后的提交,没有创建新的提交。

这意味着您要推送的历史与其他人可能已经克隆的历史不同
如果您确定不会出现问题,则需要强制执行以下操作:

git push -f origin master

您应该做的事:

git commit --allow-empty

您将创建一个新的(空)提交,可以毫无问题地推送该提交。


5

如果要在Github上创建拉取请求。您可以:

git commit --allow-empty -m "make pull request"

然后创建不变的拉取请求。


3

为了澄清接受的答案,因为我没有足够的声誉来发表评论:

使用时

git commit --amend

确实创建了一个新的提交。但是,它不会将其追加到当前提交,而是将其追加到当前提交的父级。在外观上,它看起来像叉子。

  O (old commit)
 /
O-O (amended commit)

Git将此解释为与远程的分歧。这就是为什么它不会让您不加强制地推动它。


0

确保您要推送到的远程分支当前未签出。我曾经在我的一台服务器上建立了一个git存储库,却不知道为什么我不能推送到它。经过大约一天的故障排除,我发现在服务器存储库中检出存储库(或想要的分支)后,我无法推送到该存储库。因此,我只创建了一个新分支,当我在服务器上完成更改后便签出,然后可以推送到服务器。这可能不是您的问题,但是当我在服务器上推送到空git时遇到了类似的错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.