You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定日期前的所有Git提交合并为单个Commit?

如何将指定日期前的所有Git提交合并为单个Commit

以下是两种实用的操作方法,以你给出的示例(指定日期2023-04-01,保留2023-05-01的提交abcd,合并更早的所有提交)为例:

方法一:交互式Rebase(推荐,可控性强)

这是Git合并提交的标准方式,能灵活调整提交内容和信息。

  1. 先备份分支
    操作前务必备份当前分支,防止失误丢失历史:

    git branch backup-main
    
  2. 定位要保留的提交
    找到指定日期之后的第一个提交(示例中的abcd),用命令快速获取其ID:

    git log --after="2023-04-01" --format="%H" -n 1
    
  3. 启动交互式Rebase
    以要保留的提交的父提交为基准,启动根节点开始的交互式Rebase:

    git rebase -i --root <保留的提交ID>^
    

    示例中就是:

    git rebase -i --root abcd^
    
  4. 编辑提交列表
    弹出的编辑器里,提交会按从旧到新排列(示例中是mnop→ijkl→efgh→abcd)。把需要合并的提交前的pick改成s(保留原提交信息供编辑)或f(直接丢弃原信息,用第一个合并提交的信息):

    pick mnop My Commit 1
    s ijkl My Commit 2
    s efgh My Commit 3
    pick abcd My Commit 4
    

    保存并退出编辑器。

  5. 修改合并后的提交信息与日期
    Git会再次弹出编辑器,让你编辑合并后的提交信息(改成My Squashed Commit)。保存退出后,如果要将合并提交的日期设为指定的2023-04-01,执行:

    git commit --amend --date="2023-04-01" -m "My Squashed Commit"
    
  6. 完成合并
    若没有冲突,Rebase会自动完成;若有冲突,解决冲突后执行git rebase --continue即可。

方法二:Reset + Cherry-pick(操作更简洁)

适合不需要精细调整提交信息的场景。

  1. 备份分支

    git branch backup-main
    
  2. 定位要保留的提交ID
    同样用之前的命令获取abcd的ID。

  3. 重置到保留提交的父节点
    把所有待合并的提交修改合并到暂存区:

    git reset --soft abcd^
    
  4. 创建合并提交并指定日期

    git commit --date="2023-04-01" -m "My Squashed Commit"
    
  5. 还原保留的提交
    把之前保留的abcd提交cherry-pick回来:

    git cherry-pick abcd
    

    有冲突的话,解决后执行git cherry-pick --continue。


注意事项

  • 如果分支已推送到远程仓库,合并后需要强制推送(git push -f),但这会覆盖远程历史,务必和团队成员沟通确认后再操作。
  • 操作前确保工作区无未提交的修改,避免冲突。

内容的提问来源于stack exchange,提问作者DilLip_Chowdary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:12:48