如何更改/删除提交历史?
我一直在家用计算机上处理一个项目,其中 git config user.name 与办公室的不同。我不希望刻痕混在一起。我已经将代码推送到了官方仓库。
截至目前,在提交历史记录中,我的日志为:由“my_home_nick”提交
但我希望所有提交消息都显示为:由“my_office_nick”提交
有没有这样做?
简而言之,有日志: 由 x 提交
我希望将其更改 为由 y 提交
是的,看git filter-branch
命令。它会根据需要重写历史记录。
请记住,它将创造一个新的历史。创建新历史并将分支指向它在 git 中称为“倒带”,如果您使用更常见的命令(如git rebase
. 只要没有人根据旧历史进行工作就可以了,但是如果他们这样做了,就会引起很多混乱。由其 SHA1 哈希标识的现有历史是不可变的。
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
您可以使用以下一个或多个选项
您可以使用命令 git rebase --interactive 压缩/重新组织提交
如果您没有使用 my_home_nick 将更改推送到官方存储库,您可以创建另一个克隆并使用正确的用户名提取/合并更改
您可以使用 git filter-branch 来修复提交者名称
这是同一个问题,有很多答案。
你说你推送到“官方存储库”,但如果你不是这个存储库的唯一提交者,并且有人已经提交了不正确的提交,或者更糟糕的是,基于你的提交进行了一些更改,那么留下不正确的提交者名称将减少混乱然后更改历史,因为 git 确实不允许更改提交,它只允许创建替代历史来代替不正确的历史,正如 Jan Hudec 已经写的那样。