乐闻世界logo
搜索文章和话题

How do you squash multiple Git commits into one?

4 个月前提问
3 个月前修改
浏览次数28

1个答案

1

当在Git中开发新功能或修复问题时,您可能会创建多个提交。但在合并到主分支之前,为了保持项目历史的整洁,有时需要将这些提交压缩为一个。这个过程通常被称为 Squashing commits。Git中常用的工具是git rebase。我将通过一个具体的例子来解释这一过程:

假设您正在一个新功能上工作,并且已经在一个名为feature-branch的分支上做了三次提交。这三次提交的信息如下:

  1. 添加新功能的框架
  2. 实现新功能的核心部分
  3. 修复了实现中的一些bug

现在,为了将这三个提交合并为一个,在进行代码审查或合并到主分支之前,您可以使用以下步骤:

  1. 切换到您的功能分支

    bash
    git checkout feature-branch
  2. 使用git rebase进行交互式重写历史

    bash
    git rebase -i HEAD~3

    这里的HEAD~3意味着从当前分支的最新提交开始,向后数3个提交。这将会打开一个文本编辑器,列出最近的三个提交。

  3. 在文本编辑器中,您将看到类似下面的内容:

    shell
    pick e3a1b35 添加新功能的框架 pick 7ac9a67 实现新功能的核心部分 pick 4ed2a9d 修复了实现中的一些bug

    要将这些提交压缩成一个,您需要将除了第一个pick之外的所有pick命令改为squash或简写为s。这告诉Git将这些提交合并到第一个提交中。

    shell
    pick e3a1b35 添加新功能的框架 squash 7ac9a67 实现新功能的核心部分 squash 4ed2a9d 修复了实现中的一些bug
  4. 保存并关闭编辑器

    Git将开始压缩提交,并可能会打开一个新的编辑器窗口,用于编写新的提交信息。这里,您可以编写一个新的整洁的提交信息,描述整个功能。

  5. 完成重写历史

    完成这个步骤后,feature-branch将只有一个新的提交,其中包含之前三个提交的所有更改。

  6. 将更改推送到远程仓库

    如果您之前已经将这些提交推送到了远程仓库,由于历史被重写,您需要用力推送(force push):

    bash
    git push origin feature-branch --force

通过这种方式,您可以有效地将多个提交合并为一个,从而保持项目历史的清晰和简洁。这对于代码审查和长期维护非常有帮助。

2024年8月15日 02:13 回复

你的答案