Kiedy zacząłem używać git, właśnie zrobiłem a git init
i zacząłem dzwonić add
i commit
. Teraz zaczynam zwracać uwagę i widzę, że moje zobowiązania są wyświetlane jako cowens@localmachine
, a nie adres, który chcę. Wygląda na to, że ustawiam GIT_AUTHOR_EMAIL
i GIT_COMMITTER_EMAIL
zrobię to, co chcę, ale wciąż mam te stare zatwierdzenia z niewłaściwym adresem / nazwą e-mail. Jak mogę poprawić stare zatwierdzenia?
76
git
do celów podobnych do tego lepiej zadaje się w przypadku przepełnienia stosu .Odpowiedzi:
Możesz wrócić i naprawić wszystkie swoje zobowiązania za pomocą pojedynczego połączenia z git filter-branch. Ma to taki sam efekt jak rebase, ale wystarczy wykonać jedno polecenie, aby naprawić całą historię, zamiast naprawiać każde zatwierdzenie osobno.
Za pomocą tego polecenia możesz naprawić wszystkie błędne wiadomości e-mail:
Więcej informacji jest dostępnych w Git Docs
źródło
if [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ]; then GIT_AUTHOR_EMAIL="$newemail"; fi
Polecenie Git filter-branch jest potężne, ale strasznie niewygodne jest używanie go do wszystkiego, co nie jest trywialne, na przykład, jeśli masz więcej niż jednego autora do poprawienia.
Oto alternatywa, którą uważam za przydatną, która wykorzystuje funkcję .mailmap opisaną na stronie podręcznika git-shortlog. Zapewnia to mechanizm mapowania autora, którego możemy używać z narzędziem formatującym git log. Możemy go użyć do wygenerowania poleceń do wybierania i poprawiania nazwanej sekwencji zatwierdzeń.
Załóżmy na przykład, że chcesz poprawić autorstwo w oddziale $ BRANCH, zaczynając od zatwierdzenia $ START.
Musisz utworzyć plik .mailmap w górnym katalogu swojego repozytorium, który mapuje istniejące nazwiska autorów na poprawne. Możesz uzyskać listę istniejących nazwisk autorów za pomocą:
Musisz skończyć z plikiem .mailmap takim jak ten (powiedzmy):
Teraz możesz użyć funkcji formatowania dziennika git, aby wygenerować polecenia przepisania $ BRANCH na $ BRANCH2.
Pierwsze polecenie tworzy nową pustą gałąź wyrastającą z zatwierdzenia $ START. Dla każdego zatwierdzenia między $ START a potem końcem $ BRANCH, drugie polecenie cherry wybiera oryginalne zatwierdzenie na końcu bieżącej gałęzi $ BRANCH2 i poprawia je, aby poprawnie ustawić autora.
Ma to również ogólne zastosowanie - umieść to w swoim ~ / .gitconfig:
Więc kiedy musisz poprawić autorów, teraz musisz wygenerować plik .map i wykonać:
Pierwotny numer referencyjny oddziału można przypisać do nowego, a nowy usunąć:
źródło
Łączenie odpowiedzi z Jak naprawić metainformację przy pierwszym zatwierdzeniu w git?
źródło
Aby podążać za odpowiedzią Jedberga: Możesz użyć
rebase -i
i wybrać edycję przedmiotowych zatwierdzeń. Jeśli używasz,git commit --amend --author <AUTHOR DETAILS>
a następniegit rebase continue
możesz przejść i naprawić historię.źródło