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 找到历史记录并重置。
  • 备份分支:操作前建议创建临时分支备份当前状态。

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

总结

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

相关文章

  • 解决git配置错误ssh:connect to host github.com port 22:Connection refused

    解决git配置错误ssh:connect to host github.com 

    学习git时,可能会碰到远程仓库连接问题,解决方法是确保.ssh目录正确配置,首先,确认.ssh是隐藏文件夹,可通过ctrl+h显示,然后,创建无后缀的config文件,并填写正确的git邮箱账号,最后,通过终端验证配置是否成功,这些步骤有助于解决git远程连接的常见问题
    2024-10-10
  • Mac安装软件时提示已损坏的完美解决方法

    Mac安装软件时提示已损坏的完美解决方法

    从网上下载的SecureCRT、Principle等设计软件,以及输入法等常用软件,安装时可能会提示“已损坏,移至废纸篓”这类信息,根本无法打开,这篇文章主要介绍了Mac安装软件时提示已损坏的解决方法,需要的朋友可以参考下
    2022-07-07
  • 使用git查看分支方式

    使用git查看分支方式

    这篇文章主要介绍了使用git查看分支方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Windows 版本Git命令行的使用详解

    Windows 版本Git命令行的使用详解

    这篇文章主要介绍了Windows 版本Git命令行的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 详解秒杀系统设计的5个要点

    详解秒杀系统设计的5个要点

    这篇文章主要为大家介绍了秒杀系统设计的5个要点详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 比较全的获得ip地理信息的几种方法小结

    比较全的获得ip地理信息的几种方法小结

    有时候我们需要获取ip的地理信息,方便引导用户访问或统计,需要的朋友可以参考下
    2012-02-02
  • Spark处理trick总结分析

    Spark处理trick总结分析

    这篇文章主要为大家介绍了Spark处理trick总结分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • BERT vs GPT自然语言处理中的关键差异详解

    BERT vs GPT自然语言处理中的关键差异详解

    这篇文章主要为大家介绍了BERT vs GPT自然语言处理中的关键差异详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 微信小程序学习之初探小程序

    微信小程序学习之初探小程序

    这两天“微信小程序”这个词占据了朋友圈,大有一番风起云涌之势,当然,还不可能夸张到使原生App开发人员失业这种程度。当然,作为一名技术人员,时刻保持对新技术的好奇心是必须的,所以在网上找大神的教程,搭建了一下开发环境,来学习一下这个新的开发框架。
    2016-09-09
  • 彻底解决页面文字编码乱码问题

    彻底解决页面文字编码乱码问题

    在HTML页面中、Javascript脚本中、以及XML数据传输中,因为编码导致的问题不计其数。
    2009-10-10

最新评论