Git:如何压缩`master`分支上的所有提交?

时间:2019-03-24 16:24:23

标签: git

我正在寻找一种方法来压缩所有 git提交到master分支中的单个大提交中。我完全理解我要执行的操作的后果,无需解释这是危险的,或者这不是正确的方法-我想失去我的所有历史并将此存储库变成一个大提交。 / p>

主要问题是:我没有其他活动分支,没有本地提交,并且所有以前的提交都已经已推送到远程master

也欢迎使用笨拙的脚本。

2 个答案:

答案 0 :(得分:2)

我会使用git reset --soft

git reset --soft id-of-first-revision-of-master
git commit --amend -m "single commit for master"

然后,您可以在需要该新分支的地方推动--force。

答案 1 :(得分:1)

您仍然可以使用git push --force-with-lease修改上游的历史记录。但是,您必须意识到后果。

使用git push --force将在您的上游创建并行树,因此所有开发人员都可能会发现自己迷失在旧版分支中。

要挤压您的历史记录,只需执行以下操作:

git rebase -i HEAD~10

其中10是您要压在一起的提交数+ 1。如果您要压缩所有提交,则只需引用您的<first-commit-hash>而不是HEAD~10。然后在编辑器上,为要分组的所有提交选择squash。您可以搜索/替换:picksquash

完成后,只需推送您的更改:

git push --force-with-lease

我永远不建议这样做--force,因为如果其他开发人员同时推送了提交,则您将抹去它的动作。通过使用--force-with-lease,Git会阻止您在其他更改的顶部进行推送(有关更多详细信息,请参见此question)。