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

35 git

  git commit --amend --allow-empty
Run Code Online (Sandbox Code Playgroud)

然后

  git push origin master
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 60

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

这意味着您正在推动与其他人可能已经克隆的历史不同的历史。
如果您确定这不会有问题,则需要强制推送:

git push -f origin master
Run Code Online (Sandbox Code Playgroud)

你是否应该这样做:

git commit --allow-empty
Run Code Online (Sandbox Code Playgroud)

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


小智 5

如果你想在 Github 上创建拉取请求。你可以:

git commit --allow-empty -m "make pull request"
Run Code Online (Sandbox Code Playgroud)

然后创建拉取请求而不做任何更改。