Git → Перезапись истории, замена автора

Иногда возникает необходимость перезаписать в истории коммитов автора этих саммых коммитов. На такой случай как раз и добавлю эту заметку, потому что с тех пор, как использую git, такая потребность случалась уже трижды! 😏

Далее под кат...

Хоть сейчас уже и не рекомендуют использовать git filter-branch, но у нас простой случай и подводные камни не предвидятся. Скрипт ниже, емейлы и имена редактируются по желанию:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh

git filter-branch --env-filter '

an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"

if [ "$GIT_COMMITTER_EMAIL" = "pupkin@localhost" ]
then
    cn="Taras Pupkin"
    cm="pupkin@example.org"
fi
if [ "$GIT_AUTHOR_EMAIL" = "pupkin@localhost" ]
then
    an="Taras Pupkin"
    am="pupkin@example.org"
fi

export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'

Стоит учитывать, что хеши коммитов поменяются не только у тех, где автор был отредактирован, а у всех последующих от отредактированного, поскольку хеш коммита включает и хеш родительского коммита. И нужно иметь веские причины, чтобы перезаписывать историю git в репозитории, с которым работают другие люди (или роботы)

Комментарии

0 комментариев Написать что-нибудь
Или войдите, чтобы не заполнять форму:
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Напрограммировано на Go 1.23.0, версия движка 4dbb051