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

Git中squash旧提交A、B时,如何保留新提交C、D、E的时间戳?

如何合并A和B提交且不修改C、D、E的时间戳

方法一:用参数全局保留原提交时间

  1. 启动交互式变基,目标覆盖A到E的提交历史:

    git rebase -i --committer-date-is-author-date --root
    

    如果A不是仓库的第一个提交,把--root替换成A的父提交哈希即可。

  2. 在弹出的编辑界面中,将B提交行开头的pick改成squash(或fixup,后者会丢弃B的提交信息),保持A提交行的pick不变。编辑后的内容大致如下:

    pick <A的哈希> A的提交信息
    squash <B的哈希> B的提交信息
    pick <C的哈希> C的提交信息
    pick <D的哈希> D的提交信息
    pick <E的哈希> E的提交信息
    
  3. 保存并退出编辑器,Git会自动合并A和B,然后依次应用C、D、E提交,全程保留它们原有的作者日期和提交者日期。

方法二:手动指定单提交日期(精细控制场景)

如果不想全局设置日期参数,可在变基时为C、D、E单独指定原日期:

  1. 启动交互式变基:

    git rebase -i --root
    
  2. 将B的pick改为squash,然后在C、D、E的每一行下方添加一行exec命令,替换<对应提交哈希>为C、D、E各自的哈希值:

    pick <A的哈希> A的提交信息
    squash <B的哈希> B的提交信息
    pick <C的哈希> C的提交信息
    exec git commit --amend --no-edit --date="$(git show --format=%ai <C的哈希>)"
    pick <D的哈希> D的提交信息
    exec git commit --amend --no-edit --date="$(git show --format=%ai <D的哈希>)"
    pick <E的哈希> E的提交信息
    exec git commit --amend --no-edit --date="$(git show --format=%ai <E的哈希>)"
    
  3. 保存退出后,Git会完成A和B的合并,重新提交C、D、E时会使用它们原本的提交日期。

注意事项

  • 如果这些提交已经推送到远程仓库,变基后需要执行git push --force强制推送,这会覆盖远程分支历史,务必提前和团队成员确认。
  • 合并A和B后的新提交默认使用A的作者日期,你也可以在合并时手动修改提交信息和日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:27:17