GIT:如何压缩已推送到远程仓库的多个提交?

16

我在 Git 中有一种奇怪的设置。基本上,我有:

[client 1] <---> [remote repo] ----> [client 2]

[Client 1] 是我正在使用的本地仓库,因为我无法在本地机器上编译/构建项目。

[Client 2] 是用于构建的远程服务器。

在中间,我有另一个仓库 [remote repo],基本上是用于与我的公司的中央 CVS 仓库同步,以及在我的 [client 1] 和 [client 2] 之间进行同步。

由于所有的编译/构建都在 [client 2] 上完成,所以我在 [client 1] 上有许多微不足道的提交,只是为了修复编译或构建错误。

因此,当我发现最后一次提交存在错误时,已经为时过晚,因为该提交已经被推送到并从远程仓库拉取了。

我该如何将这些(许多)微不足道的提交合并成一个?

谢谢。

2个回答

27

首先,除非你绝对必须这样做,否则要避免压缩和重新编写历史记录。拥有“微不足道”的提交并不是压缩已推送提交的理由。如果它们可以保留,就让它们保留吧。在cvs中重写历史记录一点都不简单,因此既然这些提交已经进入了cvs存储库,你应该接受这种情况。

对于git远程存储库,如果你确实希望继续-我假设你知道如何在本地存储库上压缩提交(git rebase -i很容易)。在压缩后使用-f进行推送-强制推送。


14
您可以使用git rebase -igit merge --squash来压缩提交记录,详情请参见Squash my last X commits together using Git
但由于您已经将它们发布到另一个存储库中,因此您需要在其他地方进行修复。尽管如此,git push --force命令是您需要的。但是不建议这样做:如果远程存储库已与 CVS 同步,则还需要对其进行修复... 如果其他开发人员已经从中获取了代码,则同样适用。

感谢您的回答。很抱歉我选择了manojlds的答案,只是因为他的回答略早一些,因为两个答案几乎非常相似。 - wei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接