Ändra äganderätten till en commit i Git

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

När du migrerar arkiv mellan organisationer händer det ofta att vi behöver skriva över commit-ägare. Anledningen till detta kan vara att överföra ändringar från ett konto till ett annat, t.ex. på grund av en ändring av användarens e-postadress.

Jag behövde till exempel överföra alla ändringar från mitt gamla e-postkonto på List till mitt andra Gmail-konto. Det andra fallet där jag skulle kunna begära en sådan ändring är när jag av misstag gör en överföring under en privat e-postadress, men ett visst företag vill ha överföringar under sin domän.

Som tur är finns det ett kommando som löser det här problemet och som jag kan anropa i projektmastern för att skriva över hela historiken:

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

Efter att kommandot har utförts måste ändringarna skickas till master med kommandot git push -f.

Varning:

Efter att kommandot har utförts skrivs hela historiken över och hashen ändras. Detta är ett BC-avbrott som endast bör förekomma i sällsynta fall. Om du gör ett misstag när du skriver över ändringar kan historiken inte återställas. Samtidigt måste du radera eller skriva över alla grenar, annars uppstår en konflikt om alla ändrade commits, som skrivs dubbelt (original och ny commit) när de löses.

Jan Barášek     Mer om författaren

Författaren arbetar som senior utvecklare och mjukvaruarkitekt i Prag. Han utformar och förvaltar stora webbprogram som du känner till och använder. Sedan 2009 har han skaffat sig en stor erfarenhet som han förmedlar via denna webbplats.

Jag hjälper gärna till:

Kontakt