PHP Manual
/
Doświadczenia z praktyki

Zmiana własności commitów w Gicie

08. 03. 2022

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   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
5.
Status:
All systems normal.
2024