Git 交互式变基(rebase),将多个提交合并成一个提交。


Git 交互式 Rebase 操作:合并多个提交

  1. 启动交互式变基:

    git rebase -i HEAD~n
    
    • HEAD~n 表示从当前的 HEAD 向上回溯 n 个提交。比如,HEAD~3 会回溯 3 次提交。

    • 执行这个命令后,Git 会打开一个编辑器,列出你要变基的 n 个提交。

  2. 进入编辑模式并选择要操作的提交:

    • 在编辑器中,Git 会显示类似以下的内容:

      pick abc123 Commit message 1
      pick def456 Commit message 2
      pick ghi789 Commit message 3
      
    • 你要做的是,修改除了第一个提交外的所有 picksquash,这样可以将这些提交合并到第一个提交中:

      pick abc123 Commit message 1
      squash def456 Commit message 2
      squash ghi789 Commit message 3
      
    • pick 表示保留该提交,squash 表示将该提交合并到上一个提交。

  3. 保存并退出编辑器:

    • 按下 i 进入编辑模式:如果你是使用 Vim 编辑器,可以按 i 进入插入模式,进行修改。

    • 修改完毕后按 Esc 退出插入模式:按下 Esc 键进入命令模式。

    • 保存并退出 Vim 编辑器

      • 输入 :wq,然后按 Enter 键保存文件并退出。

    • 如果 Esc 无法退出可以按 Ctrl+C 强制退出。

  4. 编辑提交信息:

    • 退出后,Git 会自动开始执行变基操作,接着会弹出一个新的编辑器,要求你合并提交信息。

    • 你会看到类似以下内容:

      # This is a combination of 3 commits.
      # The first commit's message is:
      Commit message 1
      
      # The 2nd commit's message is:
      Commit message 2
      
      # The 3rd commit's message is:
      Commit message 3
      
    • 在这里,你可以删除不必要的提交信息,保留你想要的提交信息。通常,你会保留第一个提交的消息,然后删除后面合并的提交信息。

      例如:

      Commit message 1
      
  5. 保存并退出编辑器:

    • 同样地,按 Esc 键退出插入模式,输入 :wq 保存并退出编辑器。

  6. 强制推送到远程仓库:

    • 完成上述步骤后,Git 已经成功地将多个提交合并成了一个提交。接下来你需要将更新后的历史推送到远程仓库。

    • 注意: 由于你修改了历史提交,所以你需要使用 --force-f 强制推送:

      git push --force
      
    • 使用 --force 会覆盖远程仓库的历史记录,因此请确保你理解这种操作的影响,尤其是在协作项目中。


总结:

  1. git rebase -i HEAD~5
  2. 键盘点击i进入编辑模式 将除了第一条外的其他pick改成squash 然后esc+:wq退出
  3. i 删除不必要的提交信息 esc :wq
  4. 最后强制提交:git push --force

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐