更改git提交历史记录,但将更改保留在

更改git提交历史记录,但将更改保留在,git,git-log,Git,Git Log,如何更改/删除提交历史记录 我一直在家里的电脑上做一个项目,其中git config user.name与office中的不同。 我不想让这些刻痕混在一起。 我已经将代码推送到了官方存储库 在截至目前的提交历史记录中,我的日志如下: 由“我的家”尼克犯下 但我希望所有提交消息都显示为: 由“我的办公室”尼克犯下 有没有做这件事的方法 简言之,假设有日志: 由x提交 我想换成 由y提交是,请查看git过滤器分支命令。它将根据你的需要改写历史 请记住,它将创造一个新的历史。在git中,创建新的历史并

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

我一直在家里的电脑上做一个项目,其中git config user.name与office中的不同。 我不想让这些刻痕混在一起。 我已经将代码推送到了官方存储库

在截至目前的提交历史记录中,我的日志如下: 由“我的家”尼克犯下

但我希望所有提交消息都显示为: 由“我的办公室”尼克犯下

有没有做这件事的方法

简言之,假设有日志: 由x提交

我想换成
由y提交

是,请查看
git过滤器分支
命令。它将根据你的需要改写历史


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

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

  • 您可以使用git rebase--interactive命令挤压/重新组织提交

  • 如果您没有使用my_home_nick将更改推送到官方存储库,您可以创建另一个克隆,并使用正确的用户名拉/合并更改

  • 您可以使用git筛选器分支来修复提交者名称

  • 同一个问题有很多答案


    你说你推到了“官方存储库”,但如果你不是这个存储库的唯一提交人,而且有人已经拉了不正确的提交,或者更糟糕的是,在提交的基础上进行了一些更改,留下不正确的提交人名称将比更改历史更少混乱,因为git确实不允许更改提交,它只允许创造替代历史,代替错误,正如Jan Hudec已经写的。

    你应该考虑重新措辞你的问题的标题…我认为“删除提交历史记录”实际上是指“更改提交历史记录”。它们是完全不同的东西。
    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