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

时间:2011-10-15 00:07:57

标签: git

我和Git有一个奇怪的设置。基本上我有:

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

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

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

在中间,我有另一个回购,[远程回购],基本上用于与我公司的cvs中央回购同步,并且还在我的[客户端1]和[客户端2]之间进行同步。

由于所有编译/构建都在[客户端2]上完成,因此我在[客户端1]上进行了许多简单的提交,只是为了修复编译或构建错误。

所以当我发现最后一次提交时出现错误时,已经太晚了,因为提交已经被推送到远程仓库并从中撤出。

如何将这些(许多)琐碎的提交压缩成一个? 感谢。

2 个答案:

答案 0 :(得分:27)

首先,除非你绝对必须,否则避免挤压和一般重写历史。进行“微不足道的”提交并不是压制推送提交的理由。如果他们能留下来,就让他们留下来。并且在cvs中重写历史并不简单,所以由于这些提交已经进入了cvs repo,你可能应该忍受它。

对于git远程仓库,如果你想继续 - 我假设你知道要压缩当地仓库的提交(git rebase -i很简单)。壁球后,用-f推动 - 推力。

答案 1 :(得分:14)

您可以使用git rebase -igit merge --squash压缩提交内容,请参阅Squash my last X commits together using Git

但是,由于您已将它们发布到另一个存储库,因此您必须将其修复到其他存储库。相当麻烦,但git push --force是您需要的命令。

不建议这样做:如果远程仓库已经与CVS同步,你也必须修复它......如果其他开发人员已经撤出它也是一样的。