日期在 Git 中的運作方式

Azure DevOps 服務 |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_DATEGIT_AUTHOR_DATE 來設定對應的日期,如 git-commit man 頁面所述。 如果您需要採用此方法,請使用 此 Stack Overflow 問題 作為起點。