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

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

2

Это нужно знать: у коммита две даты

У каждого коммита в 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 на текущую.

2
  • Опубликовано: 25.09.2018

Комментарии

Илья
22.10.2019
17:15
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
На всякий случай: в конце git rebase --continue
Давид
10.03.2020
11:49
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Привет! Ты вроде говорил что git commit --ammend удаляет старый коммит и создает новый, если так, то откуда он созраняет дату создания коммита? Наверное, git commit --ammend не удаляет полностью старый коммит

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила