【问题标题】:Replace e-mail address in every commit message [duplicate]替换每条提交消息中的电子邮件地址[重复]
【发布时间】:2015-04-07 18:39:02
【问题描述】:

我最近注意到,我不小心使用了 msysgit 中的签核功能,用不正确的电子邮件地址对多个提交进行了签名。不幸的是,我已经将提交推送到我的 GitHub 存储库。

有没有办法从所有提交消息中删除(或至少替换)不正确的电子邮件地址?我宁愿不留下任何错误电子邮件的痕迹。

我已经尝试替换 .git 目录及其子目录中每个文件中的每个电子邮件地址,并使用 git push --force --tags origin 'refs/heads/*' 推送更改,但它似乎不起作用。

注意:我是 GitHub 存储库的所有者。它目前是一个私人项目;没有其他人正在研究它。

【问题讨论】:

标签: git replace git-push git-commit commit-message


【解决方案1】:

你需要使用过滤器分支

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD `

如果您是提交到此存储库的ONLY用户,您可以简单地更新所有引用而不检查旧内容

git filter-branch -f --env-filter '
    GIT_AUTHOR_NAME="Newname"
    GIT_AUTHOR_EMAIL="newemail"
    GIT_COMMITTER_NAME="Newname"
    GIT_COMMITTER_EMAIL="newemail"
  ' HEAD

【讨论】:

  • 然后用和之前一样的方法推送?
  • 最好的办法是删除分支并重新添加它,因为你说没有其他人正在处理它,所以不会做任何努力。
  • 强制推送和删除/重新创建有什么区别?有没有一些github功能,关心区别?
  • 我并没有立即清楚 OP 的问题,但似乎是关于签署人(仅限),而不是作者和提交者的电子邮件,所以而不是 --commit-filter--env-filter ,最好的过滤器是--msg-filter。 (但是,提交过滤器可以做任何事情。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多