更改git提交历史记录,但将更改保留在
如何更改/删除提交历史记录 我一直在家里的电脑上做一个项目,其中git config user.name与office中的不同。 我不想让这些刻痕混在一起。 我已经将代码推送到了官方存储库 在截至目前的提交历史记录中,我的日志如下: 由“我的家”尼克犯下 但我希望所有提交消息都显示为: 由“我的办公室”尼克犯下 有没有做这件事的方法 简言之,假设有日志: 由x提交 我想换成更改git提交历史记录,但将更改保留在,git,git-log,Git,Git Log,如何更改/删除提交历史记录 我一直在家里的电脑上做一个项目,其中git config user.name与office中的不同。 我不想让这些刻痕混在一起。 我已经将代码推送到了官方存储库 在截至目前的提交历史记录中,我的日志如下: 由“我的家”尼克犯下 但我希望所有提交消息都显示为: 由“我的办公室”尼克犯下 有没有做这件事的方法 简言之,假设有日志: 由x提交 我想换成 由y提交是,请查看git过滤器分支命令。它将根据你的需要改写历史 请记住,它将创造一个新的历史。在git中,创建新的历史并
由y提交是,请查看
git过滤器分支
命令。它将根据你的需要改写历史
请记住,它将创造一个新的历史。在git中,创建新的历史并使分支指向它被称为“倒带”,如果使用更常见的命令,如
git-rebase
,也会发生这种情况。只要没有人把他们的工作建立在旧历史的基础上,这是很好的,但如果他们这样做了,就会引起很多混乱。由SHA1哈希标识的现有历史是不可变的。您可以使用以下一个或多个选项
你说你推到了“官方存储库”,但如果你不是这个存储库的唯一提交人,而且有人已经拉了不正确的提交,或者更糟糕的是,在提交的基础上进行了一些更改,留下不正确的提交人名称将比更改历史更少混乱,因为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