虎泰克博客

修改git全部已提交的用户名和邮箱


原文的link:http://dangzhiqiang.blog.51cto.com/7961271

原文的link:http://dangzhiqiang.blog.51cto.com/7961271/1657864

虎ggkc泰r_d克nfek新iagwk闻avno网rmjsd版权所有,请勿未授权转载!!!


虎l_泰e克w新mznro闻wkm网sjlk版权所有,请勿未授权转载!!!


即:修改git所有commit中的用户名和email

作为一名 Git 苦手,我一直使用的是傻瓜级的 Github 客户端,去年九月迁移到 OS X 后也是如此。好几个月后我发现自己的 contribution graph 有一大片空白,才意识到迁移之后 commit 的作者信息都错误了…

Before

Before

没计入 contribution 简直不能忍啊!身为打卡强迫症觉得这几个月相当于白干了啊!

查看 git log 发现提交者的邮箱是 Uni@Uni-MacBook-Pro.local,明白了原因是没有配置正确的邮箱。

配置方法:

git config --global user.email "youremail@google.com"
git config --global user.name "your name"

但是补救措施只对以后的 commit 起效。如果想修改之前的作者信息,Github 给出了可靠的官方指南:Changing author info。我打算照做的时候却发现第三步要复制粘贴的脚本怎么也找不到…后来意识到是 Gist 被墙了 = = 魂淡!

挂上 SS 终于看到了完整脚本…把我翻译后的完整步骤贴到下面来。

改变作者信息

为改变已经存在的 commit 的用户名和/或邮箱地址,你必须重写你 Git repo 的整个历史。

警告:这种行为对你的 repo 的历史具有破坏性。如果你的 repo 是与他人协同工作的,重写已发布的历史是一种不好的习惯。仅限紧急情况执行该操作。

使用脚本改变你 repo 的 Git 历史

我们写了一段能把 commit 作者旧的邮箱地址修改为正确用户名和邮箱的脚本。

注意:执行这段脚本会重写 repo 所有协作者的历史。完成以下操作后,任何 fork 或 clone 的人必须获取重写后的历史并把所有本地修改 rebase 入重写后的历史中。

在执行这段脚本前,你需要准备的信息:

  • 欲修改的旧的邮箱地址

  • 正确的用户名和邮箱地址

1.打开终端(Mac 或 Linux 用户)或命令行(Windows 用户)。

2.创建一个你的 repo 的全新裸 clone (repo.git 替换为你的项目,下同)
git clone --bare https://github.com/user/repo.git
cd repo.git

3.复制粘贴脚本,并根据你的信息修改以下变量:
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

4.按 Enter 执行脚本。

5.查看新 Git 历史有没有错误。

6.把正确历史 push 到 Github:(push 有困难时记得修改 DNS 或者搭梯子)
git push --force --tags origin 'refs/heads/*'

7.清除临时 clone。
cd ..
rm -rf repo.git

All done!现在遗失的 contribution 都回来啦~新的一年记得在 Github 上勤打卡~

虎jqik泰yr克jwmt新knleh闻bm_网u版权所有,请勿未授权转载!!!

注:当执行完上述的命令后,发现新clone出来的历史记录中name和email信息已经为最新的信息;可是在执行上面的脚步之前已经clone出来的项目,如果执行git pull的话,历史记录中的name和email信息还是原来的信息

虎mxsbb泰rt克iuqfx新olh闻riqq网psxp版权所有,请勿未授权转载!!!




Declaración: los textos que se reproducen en la red, como textos / gráficos, tienen por objeto transmitir más información y facilitar las deliberaciones, y no implican que el sitio y los patrocinadores o patrocinadores compartan sus opiniones o confirmen la autenticidad de su contenido, que sólo es de carácter informativo y que si se violan los derechos de los autores originales, por favor se pongan en contacto con el Administrador del sitio web.

Gracias por tu comentario.

Lista de comentarios

    Datos no disponibles