Git合并多个提交实现方式

 更新时间:2026年04月08日 09:23:24   作者:大大小小聪明  
本文介绍了在Git中使用交互式变基合并多个提交的方法,包括合并连续和不连续的提交、处理已推送到远程仓库的提交、使用git merge --squash合并分支等,文章还提供了注意事项和操作技巧,帮助开发者保持提交历史的清晰性

在 Git 中合并多个提交通常使用 交互式变基(Interactive Rebase) 功能,以下是详细步骤:

1. 基本方法:合并最近的连续提交

假设你想合并最近的 N 个提交(例如合并最近的 3 个提交):

启动交互式变基

执行命令:

git rebase -i HEAD~N
# 例如合并最近3个提交:
git rebase -i HEAD~3

编辑提交列表

编辑器会打开,显示类似如下的内容:

pick a1b2c3d Commit 1
pick e4f5g6h Commit 2
pick i7j8k9l Commit 3

将后两个提交的 pick 改为 squash(缩写 s)或 fixup(缩写 f):

pick a1b2c3d Commit 1
squash e4f5g6h Commit 2
squash i7j8k9l Commit 3

squash vs fixup

  • squash:保留被合并提交的提交信息。
  • fixup:丢弃被合并提交的提交信息,仅保留目标提交的信息。

保存并修改提交信息

  • 保存退出编辑器后,Git 会提示你编辑合并后的新提交信息。
  • 删除或修改提交信息,保存退出。

完成合并

此时,三个提交已合并为一个新的提交。

2. 合并非连续的提交

如果需要合并的提交不连续,可以通过调整提交顺序实现:

启动交互式变基

git rebase -i HEAD~N  # 或指定更早的提交哈希

调整提交顺序

在编辑器中,将需要合并的提交移动到连续的位置,并修改为 squashfixup。例如:

pick a1b2c3d Commit 1
pick e4f5g6h Commit 2
fixup i7j8k9l Commit 3  # 将此提交移动到 Commit 2 下方,并改为 fixup
pick j0k1l2m Commit 4

3. 处理已推送到远程的提交

如果提交已推送到远程仓库,合并后需强制推送(⚠️ 确保协作成员知晓此操作):

git push --force
# 或更安全的选项(推荐):
git push --force-with-lease

4. 其他方法:使用git merge --squash

如果合并分支时希望将所有提交压缩成一个:

git checkout main
git merge --squash feature-branch
git commit -m "合并 feature-branch 的所有提交"

注意事项

  • 冲突处理:变基过程中若发生冲突,解决后执行 git addgit rebase --continue
  • 撤销操作:若变基出错,可通过 git reflog 找到历史记录并重置。
  • 备份分支:操作前建议创建临时分支备份当前状态。

通过以上方法,你可以灵活地将多个提交合并,保持提交历史的清晰性。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 不同系统打开JSON文件的6种方法(总有一种适合你)

    不同系统打开JSON文件的6种方法(总有一种适合你)

    JSON文件本质上是一个文本文件,可以使用任何文本编辑器打开,本文推荐使用专门的代码编辑器,这篇文章主要给大家介绍了关于不同系统打开JSON文件的6种方法,需要的朋友可以参考下
    2024-02-02
  • 快速解决eclipse中注释的代码依然会执行的问题

    快速解决eclipse中注释的代码依然会执行的问题

    下面小编就为大家带来一篇快速解决eclipse中注释的代码依然会执行的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 基于rsync写脚本实现多节点多服务器文件一键同步的方法

    基于rsync写脚本实现多节点多服务器文件一键同步的方法

    这篇文章主要介绍了利用rsync写脚本实现多节点多服务器文件一键同步,本文将介绍 scp 和 rsync 两个命令及基本语法介绍,需要的朋友可以参考下
    2022-01-01
  • Get方法和Post方法的区别深入理解

    Get方法和Post方法的区别深入理解

    学习编程的人对Get方法和Post方法并不陌生吧,GET是从服务器上获取数据,POST是向服务器传送数据,不了解的朋友可以详细参考下
    2013-10-10
  • Git忽略大小写(重命名文件)的解决办法

    Git忽略大小写(重命名文件)的解决办法

    作为一个使用 git 作为版本控制的程序员,相信各位都遇到过这种问题,文件名或目录名的大小写整错了,这是因为 git 默认不区分文件名的大小写,所以本文给大家介绍了Git忽略大小写(重命名文件)的解决办法,需要的朋友可以参考下
    2026-02-02
  • Git分布式版本控制工具使用及说明

    Git分布式版本控制工具使用及说明

    文章介绍了Git分布式版本控制工具的基本概念、工作流程和常用命令,以及如何使用Git进行代码托管和协作,文章通过实际场景说明了Git在开发中的重要性,并详细解释了Git的分支管理和冲突解决方法
    2025-11-11
  • 解决Git merge时报错:refusing to merge unrelated histories问题

    解决Git merge时报错:refusing to merge unrelated histories问题

    在使用Git进行分支合并时,可能会遇到"refusing to merge unrelated histories"错误,这是因为尝试合并的两个分支具有不相关的历史记录,解决方法包括使用--allow-unrelated-histories参数来合并分支,保留各自历史,或者直接用一个分支的内容覆盖另一个分支
    2024-10-10
  • win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法

    win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法

    这篇文章主要介绍了win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • git中reset和revert区别小结

    git中reset和revert区别小结

    本文主要介绍了git中reset和revert区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • cypress测试工具特点及使用介绍

    cypress测试工具特点及使用介绍

    这篇文章主要为大家介绍了cypress测试工具以及为什么要使用cypress的原因,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论