Zmiana własności commitów w Gicie

📅   08. 03. 2022
👤   Jan Barášek

Podczas migracji repozytoriów pomiędzy organizacjami często zdarza się, że musimy nadpisać właścicieli commitów. Powodem tego może być przeniesienie commitów z jednego konta na drugie, na przykład z powodu zmiany adresu e-mail użytkownika.

Na przykład musiałem przenieść wszystkie commity z mojego starego konta pocztowego na Liście na moje drugie konto Gmail. Drugim przypadkiem, w którym mógłbym poprosić o taką zmianę, jest sytuacja, w której przypadkowo dokonuję commitów na prywatny adres e-mail, a dana firma chce, aby commitować pod ich domeną.

Na szczęście istnieje polecenie rozwiązujące ten problem, które mogę wywołać w głównym projekcie, aby nadpisać całą historię:

git filter-branch --env-filter "
if [ \"\$GIT_COMMITTER_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
    export GIT_COMMITTER_NAME=\"Jan Barášek\"
    export GIT_COMMITTER_EMAIL=\"janbarasek@gmail.com\"
fi
if [ \"\$GIT_AUTHOR_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
    export GIT_AUTHOR_NAME=\"Jan Barášek\"
    export GIT_AUTHOR_EMAIL=\"janbarasek@gmail.com\"
fi
" $@ --tag-name-filter cat -- --branches --tags

Po wykonaniu polecenia, zmiany należy przepłukać na master za pomocą polecenia git push -f.

Ostrzeżenie:

Po wykonaniu tego polecenia cała historia commitów zostaje nadpisana, a hashe zmienione. Jest to przerwa w BC, która powinna występować rzadko. Jeśli popełnisz błąd podczas nadpisywania commitów, nie będzie można przywrócić historii. Jednocześnie należy usunąć lub nadpisać wszystkie gałęzie, w przeciwnym razie powstanie konflikt wszystkich zmienionych commitów, który po rozwiązaniu zostanie podwójnie zapisany (oryginalny i nowy commit).

Jan Barášek     Więcej o autorze

Autor pracuje jako starszy programista i architekt oprogramowania w Pradze. Projektuje i zarządza dużymi aplikacjami internetowymi, które znasz i używasz. Od 2009 r. zdobył bogate doświadczenie, które przekazuje za pośrednictwem tej strony internetowej.

Chętnie pomogę:

Kontakt