Как изменить даты коммита git

Пошагово: установка git-edit-date, экспортируйте свою ветку в CSV, отредактируйте даты в электронной таблице, примените перезапись и смело отправляйте данные.

Когда вам это нужно

Шаг 1 — Экспортируйте ветку

Из вашего репозитория в ветке, которую вы хотите переписать:

git-edit-date export -o commits.csv

Это экспортирует текущую историю ветвей (git rev-list --reverse HEAD) в файл CSV. Только коммиты доступны из HEAD включены.

Шаг 2 — Отредактируйте CSV

Открыть commits.csv в Excel, LibreOffice Calc или любом редакторе электронных таблиц.

Столбцы CSV

Например, даты используют формат RFC3339. 2024-03-05T14:30:00+01:00. В большинстве случаев вы хотите author_date и committer_date чтобы соответствовать. См. Часто задаваемые вопросы о дате автора и дате коммиттера.

До
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

Вы можете редактировать только некоторые строки — неизмененные строки сохраняют свои исходные метаданные. Когда закончите, сохраните файл как CSV.

Шаг 3 — Примените и нажмите

Для применения требуется чистое рабочее дерево, если вы не пройдете -allow-dirty:

git-edit-date apply -file=commits.csv

Проверьте результат:

git log --format=fuller -3

Если ветка уже была отправлена, безопасно обновите удаленный компьютер:

git push --force-with-lease

Контрольный список безопасных push-уведомлений

  1. Убедитесь, что вы находитесь на правильной ветке (git branch --show-current)
  2. Убедитесь, что никто другой активно не продвигает эту ветку.
  3. Использовать --force-with-lease, не голый --force
  4. Никогда не переписывайте shared или защищенные ветки без согласия команды.
  5. Ожидайте, что подписи GPG на переписанных коммитах станут недействительными.

Установить git-edit-date

curl -LO https://giteditdate.com/git-edit-date_amd64.deb
sudo dpkg -i git-edit-date_amd64.deb

Ссылка на команду: Документация CLI · Общие вопросы: Часто задаваемые вопросы · Путеводители: несколько коммитов, дата автора