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

如何删除具有相同时间戳的重复Git提交?

删除Git中同时间戳的重复提交(保留原历史)

第一步:定位重复提交

先通过日志明确哪些提交是重复的(同时间戳),执行以下命令查看提交的短哈希、时间戳和提交信息:
git log --pretty=format:"%h %ad %s" --date=iso
输出里会显示所有提交,你可以快速找出时间戳完全相同的重复项,记录下需要保留的提交哈希以及要删除的重复项哈希。

方法一:用git filter-branch批量清理重复提交

这种方法适合大量重复提交的场景,会自动保留每个时间戳的第一个提交,跳过后续重复项:

  1. 先备份当前分支(重要,防止操作失误丢失历史):
    git branch backup-duplicate-fix

  2. 执行过滤命令,自动跳过同时间戳的重复提交:

git filter-branch --commit-filter '
    # 获取当前提交的时间戳
    current_ts=$(git show -s --format="%ad" $GIT_COMMIT)
    # 检查是否存在其他同时间戳的提交
    duplicate_exists=$(git log --all --grep="$current_ts" --pretty=format:"%h" | grep -v $GIT_COMMIT)
    if [ -z "$duplicate_exists" ]; then
        # 无重复则保留提交
        git commit-tree "$@"
    else
        # 有重复则跳过该提交
        skip_commit "$@"
    fi
' HEAD
  1. 清理filter-branch生成的临时文件:
    git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
    git reflog expire --expire=now --all
    git gc --prune=now

方法二:交互式变基手动删除(适合少量重复提交)

如果你更倾向手动选择要删除的提交,可使用交互式变基:

  1. 找到重复提交范围的起始父提交(比如最早出现重复提交的前一个提交哈希,假设为abc123):
    git rebase -i abc123

  2. 在弹出的编辑器中,找到所有重复的提交(同时间戳的),将它们前面的pick改为drop,只保留每个时间戳对应的一个提交。

  3. 保存退出编辑器,Git会自动执行变基,删除标记为drop的提交。

注意事项

  • 如果当前分支已经推送到远程仓库,修改历史后需要执行强制推送:git push -f,但务必提前告知协作的团队成员,避免冲突。
  • 操作前一定要确认备份分支可用,若操作出错可通过git checkout backup-duplicate-fix恢复。

内容的提问来源于stack exchange,提问作者ᴜsᴇʀ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:52:29