首页 > 解决方案 > 一年充满了未链接的提交。可以保留吗?

问题描述

看起来我的 git config 以某种方式改变了自己,所以所有的提交都是用我的真实姓名进行的,但没有链接到我的 github 帐户。在项目的统计数据和我的页面贡献中,我已经“丢失”了超过 1500 个提交。

我现在已经设法将我的帐户与正确的电子邮件相关联,但其他提交有我们本地域的电子邮件,例如:“user@server.local”。

是否可以将所有这些提交链接到我的真实账户?

标签: gitgithubcommit

解决方案


Github 提供了更改过去提交的作者信息(包括电子邮件)的程序。基本上,您在此脚本的适当位置输入信息:

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="user@server.local"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

并运行它。git help filter-branch如果您好奇的话,可以在 提供的手册页中描述各种选项;简而言之,--env-filter告诉 git 你将修改与提交相关的环境变量,--tag-name-filter cat告诉它不要更改标签的内容,--branches--tags告诉 git 将更改应用于可从存储库中的所有分支和标签访问的提交。完成后,您可以检查历史记录并强制推送它:

git push --force --tags origin 'refs/heads/*'

运行该命令将有效地删除和替换 Github 上存储库的整个历史记录。如果人们已经分叉或克隆了它,这会给他们带来问题,因此在这种情况下,您实际上可能希望使用运行命令后的历史记录来启动一个新的存储库,并弃用旧的存储库。


推荐阅读