如何在几次推送之后重新设置git历史记录的基础,然后推送更新的历史记录?

如何在几次推送之后重新设置git历史记录的基础,然后推送更新的历史记录?,git,heroku,git-rebase,git-commit,Git,Heroku,Git Rebase,Git Commit,我经常和heroku一起工作,在一个项目接近尾声时,我有几个小的承诺来修复一些意想不到的bug。这将导致10个小的差异提交,我希望将其重新设置为一个。问题是,历史已经被推倒了。如何协调这些事情?来自git-rebase手册页:对其他人基于其工作的分支进行重定(或任何其他形式的重写)是一个坏主意;它下游的任何人都必须手动修复其历史记录 所以,一般来说,不要在推送任何内容后重新设置基址。在推送之后,不应该重写历史记录(重新设置基址)。如果其他人从该远程设备上拉入,而您重新设置基址并推送,您将遇到严重

我经常和heroku一起工作,在一个项目接近尾声时,我有几个小的承诺来修复一些意想不到的bug。这将导致10个小的差异提交,我希望将其重新设置为一个。问题是,历史已经被推倒了。如何协调这些事情?

来自
git-rebase
手册页:对其他人基于其工作的分支进行重定(或任何其他形式的重写)是一个坏主意;它下游的任何人都必须手动修复其历史记录


所以,一般来说,不要在推送任何内容后重新设置基址。

在推送之后,不应该重写历史记录(重新设置基址)。如果其他人从该远程设备上拉入,而您重新设置基址并推送,您将遇到严重的合并冲突。

如果您确实想推送重新设置基址的分支(Git默认会拒绝该分支),您可以使用以下命令:

git push --force heroku master

请注意,总的来说,这是一个非常糟糕的想法,因为其他人已经提到了这些原因。

你想做的事情远没有人们建议的那么糟糕。确实,您不希望对推送到共享主分支的更改进行重定基址,对发送到非共享/工作分支或非共享存储库的更改进行重定基址是非常常见的。许多人认为这是一个更好的做法,而不是用毫无意义的(也可能不完整的/不工作的提交)来凌乱项目历史。p>
要问你自己的问题是“有人会从我推动的分支中拔出吗?”。如果答案是否定的,那么这样做的问题只是理论上的,远远超过了混乱历史的问题。如果答案是肯定的,那么你当然不想这么做。但是,在这种情况下,您应该问问自己是否可以从该存储库中的非共享分支进行部署。创建一个进行中测试分支,自由提交和重新设置基础。当你完成了你的工作,重新建立你心中的内容,并把这个好的承诺推到共享的分支上

这些提交是其他人正在获取/提取的吗?换句话说,它是一个共享存储库,还是一个只有您使用过的部署?@wadesworld根据下面的两个答案,这是一个坏主意,即使它不是一个共享存储库。这是一个不好的习惯,如果我发现自己认为我需要这样做,我会质疑我得出这个结论的前提。有趣。我的问题不是一个普通的问题吗?人们只是咬紧牙关,保留多个提交吗?@dougvk是的,人们通常只保留多个提交。在部署后推动多个修复通常都很有趣。rebase的主要使用案例是,在您开发某个功能时,在推送历史之前重写历史。如果其他人推送和我推送不同的历史,会发生什么情况?这并不是很糟糕,但如果您在单个存储库中与其他人协作,则会很困难。