如何在几次推送后重新定位git历史记录,然后推送更新的历史记录?

时间:2012-01-03 23:09:18

标签: git heroku git-rebase git-commit

我经常使用heroku,在项目结束时,我有几个小提交来修复一些意想不到的错误。这导致了10个小的diff提交,我希望将它们重新组合成一个。问题是,历史已被推动。我如何协调这些事情?

4 个答案:

答案 0 :(得分:6)

你想要做的事情远没有人们建议的那么糟糕。确实,您不希望将推送到共享主分支的更改重新绑定,将发送到非共享/工作分支或非共享存储库的更改重新定义非常常见。许多人认为这比使用毫无意义的(并且可能是不完整的/非工作提交)混淆项目历史更好。

要问自己的问题是“是否有人会从我推动的分支机构中撤离”。如果答案是否定的,那么这样做的问题只是理论上的,远远超过了混乱的历史问题。如果答案是肯定的,那么你当然不想这样做。但是,在这种情况下,您应该问自己是否可以从该存储库中的非共享分支进行部署。创建一个在制品测试分支,自由提交和变基。当你完成你的工作后,重新考虑你的内心并将这个好的提交推送到共享分支。

答案 1 :(得分:4)

如果确实想要推送一个重新分支的分支(默认情况下Git会拒绝),您可以使用以下命令:

git push --force heroku master

请注意,由于其他人已经提到的原因,这通常是一个非常糟糕的主意。

答案 2 :(得分:2)

在你推动之后你不应该重写历史(rebase)。如果其他人从那个遥控器中拉出来,并且你进行了反转和推动,那么你将会遇到可怕的合并冲突。

答案 3 :(得分:0)

git-rebase手册页:重新定位(或任何其他形式的重写)其他人根据其工作的分支是一个坏主意;下游的任何人都被迫手动修复他们的历史。

所以一般情况下 - 在你推动任何东西之后不要改变。