codecamp

GitHub 更改作者信息

要更改现有提交中记录的名称和/或电子邮件地址,您必须重写 Git 仓库的整个历史记录。

警告:此操作对仓库的历史记录具有破坏性。 如果您正与其他人在仓库上协作,重写已发布的历史记录被视为不良做法。 应该只在紧急情况下才这样做。

使用脚本更改仓库的 Git 历史记录

我们创建了一个用于更改任何提交的脚本,可将此前在作者或提交者字段中填写的旧电子邮件地址更改为正确的名称和电子邮件地址。

:运行此脚本会重写所有仓库协作者的历史记录。 完成这些步骤后,任何拥有复刻或克隆的人都必须获取重写的历史记录,并将任何本地更改变基为重写的历史记录。

运行此脚本之前,您需要:

  • 显示在要更改的作者/提交者字段中的旧电子邮件地址
  • 要将此类提交归因于的正确名称和电子邮件地址

  1. 打开 Git Bash。

  1. 为仓库创建一个全新的裸克隆:

   git clone --bare https://github.com/user/repo.git
   cd repo.git

  1. 复制并粘贴脚本,根据您收集的信息替换以下变量:

  • OLD_EMAIL
  • CORRECT_NAME
  • CORRECT_EMAIL

   #!/bin/sh


   git filter-branch --env-filter '


   OLD_EMAIL="your-old-email@example.com"
   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

  1. Enter 键以运行脚本。

  1. 审查新的 Git 历史记录以查找错误。

  1. 将更正的历史记录推送到 GitHub:

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

  1. 清理临时克隆:

   cd ..
   rm -rf repo.git
GitHub 删除远程
GitHub 关于 Git 变基
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GitHub 身份验证

在 GitHub 上管理订阅和通知

在 GitHub 上管理活动的订阅

GitHub 组织和团队

GitHub 管理对组织仓库的 Git 访问

GitHub 计费和付款

GitHub 使用议题和拉取请求进行协作

GitHub 在具有代码质量功能的仓库上进行协作

管理在 GitHub 上的工作

GitHub 建立强大的社区

GitHub 管理仓库

GitHub 自定义 GitHub 工作流程

在 GitHub Marketplace 中购买并安装应用程序

通过 GitHub Jobs 寻找人才

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }