改变git提交历史记录但保留更改

时间:2011-12-06 14:38:31

标签: git git-log

如何更改/删除提交历史记录?

我一直在从家用电脑开发一个项目,其中git config user.name与办公室的不同。 我不希望尼克斯混在一起。 我已经将代码推送到官方存储库。

在截至目前的提交历史记录中,我将日志记录为: 由“my_home_nick”承诺

但是我希望所有提交消息都显示为: 由“my_office_nick”承诺

有没有这样做?

总之说有日志: 由x

提交

我希望改为 由y承诺

4 个答案:

答案 0 :(得分:2)

是的,请查看git filter-branch命令。它会根据您的需要重写历史记录。

请注意,它会创建新的历史记录。创建新历史并使分支指向它在git中称为“倒带”,如果使用更常见的命令,如git rebase,也会发生这种情况。只要没有人将他们的工作建立在旧的历史上,那就很好,但如果他们这样做,就会引起很多混乱。通过它的SHA1哈希标识的现有历史是不可变的。

答案 1 :(得分:2)

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "your_home_nick" ];
        then
                GIT_COMMITTER_NAME="your_office_nick";
                GIT_AUTHOR_NAME="Office Name";
                GIT_COMMITTER_EMAIL="office@email.com";
                GIT_AUTHOR_EMAIL="author@email.com";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

答案 2 :(得分:0)

您可以使用以下一个或多个选项

  1. 您可以使用命令git rebase压缩/重组提交--interactive

  2. 如果您尚未使用my_home_nick将更改推送到官方存储库,则可以创建另一个克隆并使用正确的用户名提取/合并更改

  3. 您可以使用git filter-branch修复提交者名称

答案 3 :(得分:0)

Here是同一个问题,答案很多。

你说你推到了“官方存储库”,但如果你不是这个存储库的唯一提交者,并且有人已经提交了错误的提交,或者更糟糕的是,在提交的基础上进行了一些更改,则会导致错误的提交者名称因为git真的不允许改变提交,它只允许创建替代历史而不是错误,正如Jan Hudec所写的那样。