代码之家  ›  专栏  ›  技术社区  ›  milosmns cmcginty

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

  •  1
  • milosmns cmcginty  · 技术社区  · 5 年前

    这个问题已经有了答案:

    我在找一种压榨的方法 全部的 在中,git提交到单个大型提交中 master 分支。我完全理解我所做的一切的后果,不需要解释这是危险的,或者这不是正确的方法-我想失去我所有的历史,把这个仓库变成一个单一的大承诺。

    主要的问题是:我没有其他活的分支,没有本地提交,而且以前的所有提交都有 已经被推了 远程 主人 .

    黑客脚本也受欢迎。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Romain Valeri    5 年前

    我会使用git reset——soft

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

    然后你就可以在任何你需要新分支的地方用力。

        2
  •  1
  •   nowox    5 年前

    您仍然可以使用 git push --force-with-lease . 但是你必须意识到后果。

    使用 git push --force 将在上游创建一个并行树,以便所有开发人员可能会发现自己迷失在一个遗留分支中。

    为了压榨你的历史,只需:

    git rebase -i HEAD~10
    

    在哪里? 10 是要挤压在一起的提交数的+1。如果你想挤 全部的 提交,然后提交 <first-commit-hash> 而不是 HEAD~10 . 然后在编辑器上选择 squash 对于要组合在一起的所有提交。您可以搜索/替换: pick 通过 壁球

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

    git push --force-with-lease
    

    我决不建议这样做 --force 因为如果另一个开发人员同时推送了一个提交,您将删除它的移动。通过使用 --force-with-lease 如果有人在您最后一次更改的顶部添加了内容,git将阻止您进行推送(请参见 question 更多细节)。