当我开始使用 git 时,我只是做了 agit init
并开始调用add
and commit
。现在我开始注意了,我可以看到我的提交显示为cowens@localmachine
,而不是我想要的地址。看起来好像在设置GIT_AUTHOR_EMAIL
并且GIT_COMMITTER_EMAIL
会做我想做的事,但我仍然有那些旧的提交带有错误的电子邮件地址/名称。如何更正旧的提交?
当我开始使用 git 时,我只是做了 agit init
并开始调用add
and commit
。现在我开始注意了,我可以看到我的提交显示为cowens@localmachine
,而不是我想要的地址。看起来好像在设置GIT_AUTHOR_EMAIL
并且GIT_COMMITTER_EMAIL
会做我想做的事,但我仍然有那些旧的提交带有错误的电子邮件地址/名称。如何更正旧的提交?
您可以通过一次调用 git filter-branch 返回并修复所有提交。这与 rebase 具有相同的效果,但您只需执行一个命令即可修复所有历史记录,而不是单独修复每个提交。
您可以使用以下命令修复所有错误的电子邮件:
更多信息可从git 文档获得
Git 的 filter-branch 命令功能强大,但用于任何重要的事情都非常笨拙,例如,如果您有多个作者需要更正。
这是我发现有用的替代方法,它使用 git-shortlog 手册页中描述的 .mailmap 功能。这提供了一种作者映射机制,我们可以将其与 git log 的格式化工具一起使用。我们可以使用它来生成命令来选择和修改指定的提交序列。
例如,假设您要更正分支 $BRANCH 的作者身份,从提交 $START 开始。
您需要在存储库的顶级目录中创建一个 .mailmap 文件,该文件将现有作者姓名映射到正确的作者姓名。您可以通过以下方式获取现有作者姓名的列表:
你需要得到一个像这样的 .mailmap 文件(比如说):
现在您可以使用 git log 的格式化功能生成将 $BRANCH 重写为 $BRANCH2 的命令。
第一个命令从提交 $START 创建一个新的空分支。对于 $START 和 $BRANCH 结束之间的每个提交,第二个命令 cherry 将原始提交选择到当前分支 $BRANCH2 的末尾,并对其进行修改以正确设置作者。
这也普遍适用 - 把它放在你的 ~/.gitconfig 中:
因此,当您需要更正作者时,现在您只需生成一个 .mapfile 并执行以下操作:
原来的分支 ref 可以重新分配给新的,新的被删除:
结合How do I fix the metainformation on the first commit in git?
按照 jedberg 的回答:您可以使用
rebase -i
并选择编辑有问题的提交。如果你使用git commit --amend --author <AUTHOR DETAILS>
然后git rebase continue
你可以通过并修复历史。