要将 Git 的本地最近几个提交合并成一个提交,可以使用 git rebase 命令。这通常被称为“squash”提交。下面是具体的步骤:

假设场景

步骤

  1. 查看提交历史(可选):

    你可以使用 git log 查看最近的提交历史:

    git log --oneline
    
  2. 启动交互式 rebase:

    使用以下命令启动交互式 rebase,会打开一个文本编辑器:

    git rebase -i HEAD~3
    

    HEAD~3 表示从当前提交(HEAD)向上数三个提交。

  3. 编辑 rebase 指令:

    编辑器会打开一个包含最近 3 个提交的文件,看起来像这样:

    pick <commit-hash-1> Commit message 1
    pick <commit-hash-2> Commit message 2
    pick <commit-hash-3> Commit message 3
    

    将第二行和第三行的 pick 改为 squash(或简写 s),使其变成:

    pick <commit-hash-1> Commit message 1
    squash <commit-hash-2> Commit message 2
    squash <commit-hash-3> Commit message 3
    

    这意味着将后两个提交合并到第一个提交中。

  4. 保存并退出编辑器:

    保存文件并退出编辑器。之后,Git 会提示你编辑合并后的提交消息。

  5. 编辑提交消息:

    你可以编辑合并后的提交消息,然后保存并退出编辑器。

  6. 完成 rebase:

    Git 将会完成 rebase 操作,并将最近的 3 个提交合并为一个提交。

假设你有以下提交历史:

abcd123 (HEAD -> feature) Commit message 3
efgh456 Commit message 2
ijkl789 Commit message 1

git rebase -i HEAD~3

然后在编辑器中将文件修改为:

保存并退出编辑器。接下来,编辑合并后的提交消息,例如:

Commit message 1

Commit message 2

Commit message 3

注意事项

  1. 备份分支:在进行 rebase 操作之前,建议创建一个备份分支:

    git branch backup-feature
    
  2. 处理冲突:如果在 rebase 过程中遇到冲突,解决冲突后使用以下命令继续 rebase:

    git rebase --continue
    
  3. 强制推送:如果你已经推送过这些提交到远程仓库,你需要强制推送新的合并提交:

    git push --force
    

通过这些步骤,你可以将本地最近的几个提交合并成一个提交。