Это нужно знать: у коммита две даты
У каждого коммита в Git есть дата создания коммита — дата автора (AuthorDate) и дата изменения коммита (CommitDate). Чтобы их просмотреть выполните команду:
$ git log --pretty=fuller
commit 8438347f2bd07b5b091f0270e0217fded8a4d5d7
Author: user
AuthorDate: Tue Sep 25 20:37:28 2018 +0300
Commit: user < email@email.com>
CommitDate: Tue Sep 25 21:17:12 2018 +0300
Commit message.
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"
Дату можно задавать в различных форматах. Поддерживаемые форматы приведены в официальном руководстве в параграфе Date Formats.
Приведенные выше команды, меняют дату создания коммита AuthorDate и дату изменения коммита CommitDate. CommitDate устанавливается равным текущей дате, так как выполняется изменение коммита (git commit --amend).
Изменение даты CommitDate последнего коммита на текущую
Чтобы изменить дату изменения коммита (CommitDate) на текущую можно воспользоваться командой:
LANG= GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit
GIT_COMMITTER_DATE — это переменная окружения, которая устанавливается в значение, которое будет присвоено CommitDate. В данном случае значение устанавливается равным выводу команды date, которая выводит текущее время и дату.
LANG= используется для того, чтобы команда date вывела время без учета локали вашей системы, иначе git не распознает формат, если например дата будет содержать русские символы.
Изменение даты CommitDate последнего коммита на произвольную
Чтобы изменить дату изменения коммита (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). Сохраняем изменения и закрываем редактор (если это редактор Vi, то нужно нажать клавишу двоеточие : и ввести qw).
Далее изменяем дату у данного коммита.
- Если нужно изменить дату создания коммита (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:
git rebase --continue
Обратите внимание, что после этой команды у коммитов, которые выше изменяемого коммита, изменится дата CommitDate на текущую.
Комментарии
17:15
11:49