git – przepisywanie historii

Ostatnio robiąc porządki w jednym repozytorium użyłem złego klucza ssh. To spowodowało, że commit-y w repozytorium oznaczone były nie tym użytkownikiem, którym chciałem. Jak to w gicie bywa, (prawien) nie ma rzeczy, których by się nie dało naprawić.

Zatem jak przepisać całą historię (od pierwszego commita) i zmienić autora? Dodatkowo, jak przepisać historię i nie popsuć dat commitów?

Krok pierwszy, ustawić prawidłowo git-a a w szczególności:

user.name
user.email

A później przepisać historię:

git -c rebase.instructionFormat='%s%nexec GIT_COMMITTER_DATE="%cD" GIT_AUTHOR_DATE="%aD" git commit --amend --no-edit --reset-author' rebase --root

Powyższa komenda robi rebase od początku historii (parametr –root) i aktualizuje autora, ale nie psuje oryginalnej daty commit-a. To ważne, jeśli zachować historię.

Na koniec pozostaje wypchnąć zmiany czyli git push –force i temat z głowy.

Scroll to Top