Jak zmieniać daty commitów Git
Krok po kroku: zainstaluj git-edit-date, wyeksportuj gałąź do CSV, edytuj daty w arkuszu, zastosuj przepisanie i bezpiecznie wypchnij zmiany.
Kiedy jest to potrzebne
- Commity pokazują znaczniki czasu UTC z procesu CI zamiast lokalnej strefy czasowej
- Rozregulowany zegar laptopa nadał grupie commitów błędny czas
- E-mail lub nazwa autora są błędne w wielu commitach gałęzi funkcjonalnej
- Chcesz sprawdzić każdą zmianę daty w arkuszu przed przepisaniem historii
Krok 1 — wyeksportuj gałąź
W repozytorium, w gałęzi, którą chcesz przepisać:
git-edit-date export -o commits.csv
Polecenie eksportuje historię bieżącej gałęzi (git rev-list --reverse HEAD)
do pliku CSV. Uwzględnia tylko commity osiągalne z HEAD.
Krok 2 — edytuj CSV
Otwórz commits.csv w Excelu, LibreOffice Calc lub dowolnym edytorze arkuszy.
Kolumny CSV
hash— pierwotny SHA commitu (tylko informacyjnie; nie edytuj)author_name— wyświetlana nazwa autora commituauthor_email— e-mail autora commituauthor_date— czas pierwotnego wykonania pracy (RFC3339)committer_date— czas utworzenia obiektu commitu (RFC3339)message— komunikat commitu (tylko informacyjnie; nie jest zmieniany przez apply)
Daty mają format RFC3339, na przykład 2024-03-05T14:30:00+01:00.
W większości przypadków author_date i committer_date powinny być równe.
Zobacz FAQ o dacie autora i dacie committera.
author_email,author_date,committer_date
alice@wrong.com,2024-03-06T03:14:00Z,2024-03-06T03:14:00Z
author_email,author_date,committer_date
alice@work.com,2024-03-05T14:30:00+01:00,2024-03-05T14:30:00+01:00
Możesz edytować tylko wybrane wiersze — pozostałe zachowają pierwotne metadane. Po zakończeniu zapisz plik jako CSV.
Krok 3 — zastosuj i wypchnij zmiany
Apply wymaga czystego drzewa roboczego, chyba że przekażesz -allow-dirty:
git-edit-date apply -file=commits.csv
Sprawdź wynik:
git log --format=fuller -3
Jeśli gałąź została już wypchnięta, bezpiecznie zaktualizuj zdalne repozytorium:
git push --force-with-lease
Lista kontrolna bezpiecznego wypychania
- Potwierdź, że jesteś we właściwej gałęzi (
git branch --show-current) - Upewnij się, że nikt inny aktywnie nie wypycha zmian do tej gałęzi
- Użyj
--force-with-lease, a nie samego--force - Nigdy nie przepisuj wspólnych ani chronionych gałęzi bez zgody zespołu
- Podpisy GPG przepisanych commitów staną się nieważne
Zainstaluj git-edit-date
curl -LO https://giteditdate.com/git-edit-date_amd64.deb
sudo dpkg -i git-edit-date_amd64.deb
Dokumentacja poleceń: Docs CLI · Częste pytania: FAQ · Poradniki: wiele commitów, data autora