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

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

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.

Przed
author_email,author_date,committer_date
alice@wrong.com,2024-03-06T03:14:00Z,2024-03-06T03:14:00Z
Po
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

  1. Potwierdź, że jesteś we właściwej gałęzi (git branch --show-current)
  2. Upewnij się, że nikt inny aktywnie nie wypycha zmian do tej gałęzi
  3. Użyj --force-with-lease, a nie samego --force
  4. Nigdy nie przepisuj wspólnych ani chronionych gałęzi bez zgody zespołu
  5. 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