Skip to main content

Замена пользователя и 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'new@email.com'" --force

    New Name — новое имя автора и коммиттера.

    new@email.com — новый email.

    --force — требуется для работы не на свежем клоне.

    Пример:

    python -m git_filter_repo --name-callback "return b'John Doe'" --email-callback "return b'john.doe@example.com'" --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 <new@email.com> <old@email1.com>
      New Name <new@email.com> <old@email2.com>

      2. Выполнить фильтрацию:

      python -m git_filter_repo --mailmap my-mailmap.txt --force

      Важно!

        После переписывания истории используйте только git push --force.

        Все, кто работал с этим репозиторием, должны сделать новый клон или жёсткий reset.

        Рекомендуется всегда работать на свежем клоне, чтобы не потерять старые данные.