我正在寻找一种方法来压缩所有 git提交到master
分支中的单个大提交中。我完全理解我要执行的操作的后果,无需解释这是危险的,或者这不是正确的方法-我想失去我的所有历史并将此存储库变成一个大提交。 / p>
主要问题是:我没有其他活动分支,没有本地提交,并且所有以前的提交都已经已推送到远程master
。
也欢迎使用笨拙的脚本。
答案 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
。您可以搜索/替换:pick
到squash
完成后,只需推送您的更改:
git push --force-with-lease
我永远不建议这样做--force
,因为如果其他开发人员同时推送了提交,则您将抹去它的动作。通过使用--force-with-lease
,Git会阻止您在其他更改的顶部进行推送(有关更多详细信息,请参见此question)。