Леонид МаслаковLenpaste

Перезаписать имя и email в предыдущих коммитах Git

30.12.2023

Если вам требуется перезаписать имя и email в уже зафиксированных коммитах, то вам подойдёт ниже приведённый скрипт.

#!/bin/sh

# Get user params
echo -n "Old email: " && read -r OLD_EMAIL
echo -n "New email: " && read -r NEW_EMAIL
echo -n "New name: " && read -r NEW_NAME

# Update git repo
OLD_EMAIL="$OLD_EMAIL" \
CORRECT_NAME="$NEW_NAME" \
CORRECT_EMAIL="$NEW_EMAIL" \
FILTER_BRANCH_SQUELCH_WARNING=1 \
git filter-branch --env-filter '
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

Запустите скрипт и введите старый email, новый email и новое имя:

Old email: root@lcomrade.su
New email: john.doe@example.org
New name: John Doe
Rewrite d0faaaf915c61c2e60fa8aa2cc4a4c85dc6d356c (3/3) (0 seconds passed, remaining 0 predicted)    
Ref 'refs/heads/main' was rewritten

Теперь нужно запушить изменения на удалённый сервер:

git push --force
Содержание