【问题标题】:Git - Duplicate commit issueGit - 重复提交问题
【发布时间】:2009-12-30 23:37:43
【问题描述】:

我不小心在我的存储库中通过“未知”创建了提交,并决定尝试从 here 运行命令:

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "unknown" ];
        then
                GIT_COMMITTER_NAME="..";
                GIT_AUTHOR_NAME="..";
                GIT_COMMITTER_EMAIL="...";
                GIT_AUTHOR_EMAIL="...";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

一开始我以为一切都很好,直到我在 gitk 中注意到运行它之前的每个提交都是重复的,而不是像我最初想的那样简单地编辑。

可以清理吗?

编辑: 好的,gitk 显示旧提交(混入“未知”提交者的提交)和新提交(重写的提交),它们在某个时间点分开半。想想一堆提交,然后复制(和编辑),并堆叠在原始提交之上。如果可能的话,我想要做的是删除原始的。

【问题讨论】:

  • 让我们看看我是否得到这个:你有一个看起来像...--a--b--c--(*)--a'--b'--c'--d--e 的提交树,其中(*) 是你运行错误命令的提交,[abc]' 是错误的您要删除的重复提交,[de] 是您要保留的提交?
  • 嗯,由于分支,它更复杂,但基本上正如你所说,但我想保留 ' 的,因为它们的作者字段是固定的。
  • 好的,所以你想删除[abc],但保留[abc]'?
  • 是的,我想删除我原来的提交。

标签: git


【解决方案1】:

答案是.git/refs/original 中的文件,而我发现的命令不应该以HEAD 结尾,而是以--tag-name-filter cat -- --all 结尾。

为来自#git 频道的 _Vi 和 wereHamster 干杯以寻求帮助。

【讨论】:

    【解决方案2】:

    如果你知道最后一个好的提交,用这个保存你的培根:

    git reset <last_good_commit>   # Warp back to a good state.
    git push -f master             # Push the changes up (you need -f to force it to
                                   #  obliterate old commits).
    

    如果您想更加小心(例如,如果在 &lt;last_good_commit&gt; 之后混合了好的和坏的提交),请使用 git rebase -i 来挑选应该留下的好的提交。

    【讨论】:

    • 我对命令行不是很熟悉,我也不确定什么是樱桃采摘或变基......另外,我已经添加了关于我想要做什么的说明。
    猜你喜欢
    • 2010-12-17
    • 2022-10-20
    • 2011-06-23
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多