Как изменить дату коммита в Git

a298e5ec1b82f1dda928f831f5c2c46c7aa49776
Шпаргалка по командам для изменения даты создания и изменения коммитов в Git

Содержание

  • Изменение даты создания последнего коммита на текущую
  • Изменение даты создания последнего коммита на произвольную
  • Изменение даты изменения последнего коммита на текущую
  • Изменение даты изменения последнего коммита на произвольную
  • Изменение даты произвольного коммита

У каждого коммита в Git есть дата создания коммита (AuthorDate) и дата изменения коммита (CommitDate). Чтобы их просмотреть выполните команду:

$ git log --pretty=fuller

commit 4e90aaf65850ab31cff75f53f5cc040bf036386d (HEAD -> master, origin/master)
Author:     delphinpro <delphinpro@yandex.ru>
AuthorDate: Wed Dec 20 15:16:40 2023 +0400
Commit:     delphinpro <delphinpro@yandex.ru>
CommitDate: Wed Dec 20 15:16:40 2023 +0400

    Обновлен главный экран админки

AuthorDate — дата, когда коммит был создан (когда был выполнен первый git commit).

CommitDate — дата изменения коммита, которая обновляется каждый раз, когда коммит изменяется (например, при выполнении git commit --amend). Во время создания коммита эта дата равна AuthorDate.

При выполнении команды git log без параметров в поле Date отображается именно дата создания коммита (AuthorDate).

Изменение даты создания последнего коммита на текущую

Для изменения даты создания последнего коммита (AuthorDate) на текущую используйте следующую команду:

git commit --amend --no-edit --date=now

Есть еще один способ, но меняет он не только дату (AuthorDate), но и автора коммита. Используйте ключ --reset-author, который изменяет дату создания коммита на текущую, и обновляет автора коммита.

git commit --amend --no-edit --reset-author

Изменение даты создания последнего коммита на произвольную

Для изменения даты создания последнего коммита (AuthorDate) на произвольную дату, необходимо в --date указать требуемую дату в правильном формате. Например:

git commit --amend --no-edit --date="2018.09.25 12:00"

Или, например, в более сложном формате:

git commit --amend --no-edit --date="Tue Sep 25 20:34:28 2018 +0300"

Дату можно задавать в различных форматах. Поддерживаемые форматы приведены в официальном руководстве по Git в параграфе Date Formats.

Приведенные выше команды, меняют дату создания коммита AuthorDate и дату изменения коммита CommitDate. CommitDate устанавливается равным текущей дате, так как выполняется изменение коммита (git commit --amend).

Изменение даты изменения последнего коммита на текущую

Чтобы изменить дату изменения коммита (CommitDate) на текущую воспользуйтесь командой:

LANG= GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit

GIT_COMMITTER_DATE — это переменная окружения, которая устанавливается в значение, которое будет присвоено CommitDate. В данном случае значение устанавливается равным выводу команды date, которая выводит текущее время и дату.

LANG= используется для того, чтобы команда date вывела время без учета локали вашей системы, иначе Git не распознает формат, если например дата будет содержать русские символы.

Изменение даты изменения последнего коммита на произвольную

Чтобы изменить дату изменения коммита (CommitDate) на произвольную, укажите в переменной GIT_COMMITTER_DATE желаемую дату в правильном формате:

GIT_COMMITTER_DATE="Tue Sep 25 20:34:28 2018 +0300" git commit --amend --no-edit

Изменение даты произвольного коммита

Чтобы изменить дату произвольного коммита воспользуйтесь командой git rebase. Сначала определите хеш коммита, посмотрев лог:

git log --oneline

Выполните git rebase, подставляя вместо commit_hash хеш коммита, дату которого хотите изменить:

git rebase commit_hash^ -i

В открывшемся редакторе поменяйте pick у первого коммита на e (или на edit). Сохраните изменения и закройте редактор.

Далее измените дату у данного коммита. Если нужно изменить дату создания коммита (AuthorDate):

git commit --amend --no-edit --date="Tue Sep 25 20:00:21 2018 +0300"

Если нужно изменить CommitDate:

GIT_COMMITTER_DATE="Tue Sep 25 20:34:28 2018 +0300" git commit --amend --no-edit

И завершите rebase:

rebase --continue

Обратите внимание, что после этой команды у коммитов, которые выше изменяемого коммита, изменится дата CommitDate на текущую.