git - 一年充满了未链接的提交。可以保留吗?
问题描述
看起来我的 git config 以某种方式改变了自己,所以所有的提交都是用我的真实姓名进行的,但没有链接到我的 github 帐户。在项目的统计数据和我的页面贡献中,我已经“丢失”了超过 1500 个提交。
我现在已经设法将我的帐户与正确的电子邮件相关联,但其他提交有我们本地域的电子邮件,例如:“user@server.local”。
是否可以将所有这些提交链接到我的真实账户?
解决方案
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 上存储库的整个历史记录。如果人们已经分叉或克隆了它,这会给他们带来问题,因此在这种情况下,您实际上可能希望使用运行命令后的历史记录来启动一个新的存储库,并弃用旧的存储库。
推荐阅读
- c - 如何修复从堆栈中删除元素的功能?
- node.js - 如何在nodejs中的函数之外评估()?
- ios - 获取服务器 JSON 响应作为 NSDictionary
- java - 从 7.7 版开始使用 kjar 打包的 Drools 项目构建失败
- ubuntu - 如何获取进程的详细 CPU 和内存利用率?
- php - CRUD:编辑功能不起作用它在显示所有页面中没有任何改变
- rust - 在没有克隆的向量上映射
- ios - 如何为警报确定操作按钮提供背景颜色以及如何在 swift 中为警报中的标题提供顶部空间
- r - 试图在 r 中抓取多个链接但不知道
- cadence-workflow - Uber Cadence 活动是否应该成为服务实施的一部分?