Замена пользователя и email во всех коммитах
Массовая замена имени и email в истории Git-репозитория
1. Проверить всех авторов и их email
git log --format='%an <%ae>' | sort
Выведет список всех уникальных авторов и их email. Используйте этот список, чтобы убедиться, что все нужные данные попадут под замену.
2. Замена имени и email во всех коммитах (через callback)
python -m git_filter_repo --name-callback "return b'New Name'" --email-callback "return b'[email protected]'" --force
-
New Name
— новое имя автора и коммиттера. -
[email protected]
— новый email. -
--force
— требуется для работы не на свежем клоне.
Пример:
python -m git_filter_repo --name-callback "return b'John Doe'" --email-callback "return b'[email protected]'" --force
3. Добавить ссылку на удалённый репозиторий
Данный пункт необходим, т.к. после выполнения git_filter_repo связь с удаленным репозиторием удаляется.
git remote add origin https://github.com/yourname/yourrepo.git
Замените на свой адрес удалённого репозитория.
4. Форсированная отправка истории в удалённый репозиторий
git push --force origin main
-
Если основная ветка называется иначе, подставьте нужное имя (например,
master
).
Установка git-filter-repo
Через pip (универсально, нужен Python):
pip install git-filter-repo
Через Homebrew (macOS):
brew install git-filter-repo
Проверка установки:
python -m git_filter_repo --help
Если появилась справка — всё готово.
Замена только определённых email/имён через файл mailmap
1. Создать файл my-mailmap.txt
со строками замены:
New Name <[email protected]> <[email protected]>
New Name <[email protected]> <[email protected]>
2. Выполнить фильтрацию:
python -m git_filter_repo --mailmap my-mailmap.txt --force
Важно!
-
После переписывания истории используйте только
git push --force
. -
Все, кто работал с этим репозиторием, должны сделать новый клон или жёсткий reset.
-
Рекомендуется всегда работать на свежем клоне, чтобы не потерять старые данные.
No Comments