Как работают даты в Git

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Git отслеживает две даты в фиксации: дату автора и дату фиксации. Кроме того, Azure DevOps Services и Azure DevOps Server отслеживают, когда фиксация была отправлена на сервер.

  • Дата автора: когда фиксация была первоначально создана. Как правило, это дата, когда кто-то сначала побежал git commit.
  • Дата фиксации: когда фиксация была применена к ветви. Во многих случаях это совпадает с датой автора. Он может отличаться, если фиксация была изменена, перебазирована или применена кем-либо, кроме автора в составе исправления. В этих случаях дата заключается в том, когда произошла перебаза или была применена исправление.
  • Дата отправки: когда фиксация была отправлена в удаленный репозиторий в вопросе. Эта дата зависит от используемой удаленной системы управления версиями и недоступна в локальном репозитории.

При запуске git logдата автора по умолчанию отображается. Если вы хотите, чтобы дата фиксации отображалась, можно использовать один из многих вариантов командной строки, например --pretty=fuller.

Давайте рассмотрим краткий пример, чтобы увидеть эти понятия на практике. Сначала создайте обычную фиксацию:

git init
echo test > file.txt
git add *
git commit -m "A normal commit message"

Теперь измените фиксацию с другим сообщением:

echo again > file.txt
git add *
git commit --amend -m "An amended commit"

Если вы проверяете журнал регулярных журналов, появится следующая информация:

git log

commit 17232459f0ae25adeff21c9e21742ba22b7f3499
Date:   Thu Feb 25 19:38:54 2016 -0500

    An amended commit

Теперь просмотрите ту же фиксацию с датой автора:

git log --pretty=fuller

commit 17232459f0ae25adeff21c9e21742ba22b7f3499
AuthorDate: Thu Feb 25 19:38:54 2016 -0500
Commit:     Ross Brodbeck <robrodbe@microsoft.com>
CommitDate: Thu Feb 25 19:39:36 2016 -0500

    An amended commit

Обратите внимание на небольшое различие между датой автора и датой фиксации в примерах. Дата автора — это исходное время фиксации без изменения. Дата фиксации — это время выполнения --amend команды.

Многие git log варианты помогут лучше понять даты. Например, при передаче флага --date можно определить, как отображаются даты. Этот флаг может быть полезен для нормализации часовых поясов, так как Git отображает даты в исходном часовом поясе по умолчанию. Это также может быть полезно для изменения отображаемой строки даты.

Дополнительные сведения о параметрах форматирования см. на странице git-log man.

Изменение дат Git

Когда вы готовитесь к фиксации кода, у вас есть возможность задать даты автора и фиксации. Эта способность не является чем-то, что вы должны использовать часто.

Вы можете изменить дату автора фиксации, передав --date флаг git commitв . Различные статьи обсуждают форматирование этого флага, но он не хорошо документирован. Этот вопрос Stack Overflow делает большую работу, чтобы объяснить допустимые форматы дат.

Вы также можете использовать переменные GIT_COMMITTER_DATE среды и GIT_AUTHOR_DATE задать соответствующие даты, как описано на странице git-commit man. Если вам нужно использовать этот подход, используйте этот вопрос Stack Overflow в качестве отправной точки.