# Замена пользователя и email во всех коммитах

# Массовая замена имени и email в истории Git-репозитория

## 1. Проверить всех авторов и их email

```sh
git log --format='%an <%ae>' | sort
```

*Выведет список всех уникальных авторов и их email. Используйте этот список, чтобы убедиться, что все нужные данные попадут под замену.*

---

## 2. Замена имени и email во всех коммитах (через callback)

```sh
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` — требуется для работы не на свежем клоне.

**Пример:**

```sh
python -m git_filter_repo --name-callback "return b'John Doe'" --email-callback "return b'john.doe@example.com'" --force
```

---

## 3. Добавить ссылку на удалённый репозиторий

Данный пункт необходим, т.к. после выполнения git\_filter\_repo связь с удаленным репозиторием удаляется.

```sh
git remote add origin https://github.com/yourname/yourrepo.git
```

*Замените на свой адрес удалённого репозитория.*

---

## 4. Форсированная отправка истории в удалённый репозиторий

```sh
git push --force origin main
```

- Если основная ветка называется иначе, подставьте нужное имя (например, `master`).

---

## Установка `git-filter-repo`

### Через pip (универсально, нужен Python):

```sh
pip install git-filter-repo
```

### Через Homebrew (macOS):

```sh
brew install git-filter-repo
```

### Проверка установки:

```sh
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. Выполнить фильтрацию:

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

---

## Важно!

- После переписывания истории используйте только `git push --force`.
- Все, кто работал с этим репозиторием, должны сделать новый клон или жёсткий reset.
- Рекомендуется всегда работать на свежем клоне, чтобы не потерять старые данные.