Git push --force让远程主机丢弃糟糕的提交?

时间:2016-01-22 22:33:19

标签: git github

我对github上托管的项目做了一些不好的提交。我用github的bfg工具删除了提交,然后推送到github并git克隆了我使用的各种本地机器上的项目。我的本地机器和github之间的一切都很正常。

但是,我部署到仍包含错误提交的遥控器。当我这样做时:

git push remote master

我收到此错误:

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@remote:blah/blah.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

当我这样做时:

git push --force remote master

一切都按预期进行;但是,我每次都必须这样做。有没有办法告诉git覆盖遥控器上的master,以便在没有克隆的情况下丢弃糟糕的提交?

2 个答案:

答案 0 :(得分:0)

错误意味着您在远程端有一些新的东西,而您在本地没有这些东西并根据您的评论:

  

问题是远程端的“新”提交很糟糕,需要丢弃。我不希望他们合并。

在这种情况下,--force是覆盖“错误”提交的唯一方法。

但这也意味着你使用了错误的git工作流程。如果你这样做,你永远不应该对主人提出这些“坏”提交:

  • 为每个新功能创建一个新分支并在那里进行开发,永远不要直接提交到master分支
  • 一旦功能完成 - 检查更改,如果它是好的 - 将其合并到master,如果没有 - 丢弃它(只是不合并)

答案 1 :(得分:-1)

如果您只是向远程存储库添加新提交,则可以git push remote master使用本地新提交更新远程存储库。但是,如果您不仅要添加新提交,而是删除更新其中一些提交,则不允许git push。在这种情况下,您需要git push --force remote master替换(而不是更新)您的本地远程提交历史记录。