設定與組態
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.45.1 → 2.47.0 無變更
-
2.45.0
04/29/24
- 2.43.1 → 2.44.2 無變更
-
2.43.0
11/20/23
- 2.35.1 → 2.42.3 無變更
-
2.35.0
01/24/22
- 2.31.1 → 2.34.8 無變更
-
2.31.0
03/15/21
- 2.27.1 → 2.30.9 無變更
-
2.27.0
06/01/20
- 2.25.2 → 2.26.3 無變更
- 2.25.1 無變更
- 2.22.1 → 2.25.0 無變更
-
2.22.0
06/07/19
- 2.14.6 → 2.21.4 無變更
-
2.13.7
05/22/18
- 2.12.5 無變更
-
2.11.4
09/22/17
- 2.10.5 無變更
-
2.9.5
07/30/17
- 2.7.6 → 2.8.6 無變更
-
2.6.7
05/05/17
- 2.5.6 無變更
-
2.4.12
05/05/17
- 2.1.4 → 2.3.10 無變更
-
2.0.5
12/17/14
概要
git commit-tree <tree> [(-p <parent>)…] git commit-tree [(-p <parent>)…] [-S[<keyid>]] [(-m <message>)…] [(-F <file>)…] <tree>
描述
這通常不是終端使用者想要直接執行的命令。請改用 git-commit[1]。
根據提供的樹狀物件建立新的提交物件,並在標準輸出上發出新的提交物件 ID。除非提供 -m
或 -F
選項,否則日誌訊息會從標準輸入讀取。
-m
和 -F
選項可以以任何順序給定任何次數。提交日誌訊息會依照選項給定的順序組成。
一個提交物件可以有任意數量的父物件。只有一個父物件時,它是一個普通的提交。有多個父物件會使提交成為多條歷史記錄線之間的合併。初始(根)提交沒有父物件。
雖然樹狀結構表示工作目錄的特定目錄狀態,但提交表示該狀態在「時間」中的狀態,並解釋如何到達該狀態。
通常提交會識別新的「HEAD」狀態,雖然 Git 並不在乎您將該狀態的附註儲存在哪裡,但在實務上,我們傾向於將結果寫入 .git/HEAD
所指向的檔案,以便我們始終可以看到上次提交的狀態。
選項
- <tree>
-
現有的樹狀物件。
- -p <parent>
-
每個
-p
都表示父提交物件的 ID。 - -m <message>
-
提交日誌訊息中的一個段落。可以給定多次,每個 <message> 都會成為自己的段落。
- -F <file>
-
從給定的檔案讀取提交日誌訊息。使用
-
從標準輸入讀取。可以給定多次,每個檔案的內容都會成為自己的段落。 - -S[<keyid>]
- --gpg-sign[=<keyid>]
- --no-gpg-sign
-
GPG 簽署提交。
keyid
引數是可選的,預設為提交者身分;如果指定,則必須不帶空格地附加到選項。--no-gpg-sign
可用於撤銷先前在命令列中給定的--gpg-sign
選項。
提交資訊
提交封裝
-
所有父物件 ID
-
作者姓名、電子郵件和日期
-
提交者姓名和電子郵件以及提交時間。
提交註解會從標準輸入讀取。如果未透過 "<" 重新導向提供變更日誌項目,則git commit-tree 會等待輸入一個項目並以 ^D 終止。
日期格式
GIT_AUTHOR_DATE
和 GIT_COMMITTER_DATE
環境變數支援下列日期格式
- Git 內部格式
-
格式為
<unix-timestamp> <time-zone-offset>
,其中<unix-timestamp>
是自 UNIX Epoch 以來的秒數。<time-zone-offset>
是與 UTC 的正或負時差。例如,CET(比 UTC 早 1 小時)是+0100
。 - RFC 2822
-
RFC 2822 所述的標準日期格式,例如
Thu, 07 Apr 2005 22:13:13 +0200
。 - ISO 8601
-
ISO 8601 標準指定的日期和時間,例如
2005-04-07T22:13:13
。剖析器也接受空格來代替T
字元。秒的小數部分會被忽略,例如2005-04-07T22:13:13.019
會被視為2005-04-07T22:13:13
。注意此外,日期部分接受下列格式: YYYY.MM.DD
、MM/DD/YYYY
和DD.MM.YYYY
。
討論
Git 在某種程度上不區分字元編碼。
-
Blob 物件的內容是未經解譯的位元組序列。核心層次沒有編碼轉換。
-
路徑名稱以 UTF-8 正規化形式 C 編碼。這適用於樹狀物件、索引檔案、參照名稱,以及命令列引數、環境變數和組態檔案中的路徑名稱(
.git/config
(請參閱 git-config[1])、gitignore[5]、gitattributes[5] 和 gitmodules[5])。請注意,核心層次的 Git 只將路徑名稱視為非 NUL 位元組的序列,沒有路徑名稱編碼轉換(Mac 和 Windows 除外)。因此,即使在使用傳統擴充 ASCII 編碼的平台和檔案系統上,使用非 ASCII 路徑名稱也大多可以正常運作。但是,在此類系統上建立的儲存庫在基於 UTF-8 的系統(例如 Linux、Mac、Windows)上無法正常運作,反之亦然。此外,許多基於 Git 的工具只假設路徑名稱為 UTF-8,並且無法正確顯示其他編碼。
-
提交日誌訊息通常以 UTF-8 編碼,但也支援其他擴充 ASCII 編碼。這包括 ISO-8859-x、CP125x 和許多其他編碼,但不包括 UTF-16/32、EBCDIC 和 CJK 多位元組編碼(GBK、Shift-JIS、Big5、EUC-x、CP9xx 等)。
雖然我們鼓勵提交日誌訊息以 UTF-8 編碼,但核心和 Git Porcelain 的設計目的都不是強制專案使用 UTF-8。如果特定專案的所有參與者都覺得使用傳統編碼更方便,Git 並不禁止。但是,有幾件事需要注意。
-
如果提供給 git commit 和 git commit-tree 的提交日誌訊息看起來不像有效的 UTF-8 字串,除非您明確說明您的專案使用傳統編碼,否則會發出警告。表達此意的方式是在
.git/config
檔案中加入i18n.commitEncoding
,如下所示[i18n] commitEncoding = ISO-8859-1
使用上述設定建立的提交物件會在它們的
encoding
標頭中記錄i18n.commitEncoding
的值。這有助於稍後檢視它們的其他人。缺少此標頭表示提交日誌訊息以 UTF-8 編碼。 -
git log、git show、git blame 和相關命令會檢視提交物件的
encoding
標頭,並嘗試將日誌訊息重新編碼為 UTF-8,除非另有指定。您可以使用.git/config
檔案中的i18n.logOutputEncoding
來指定所需的輸出編碼,如下所示[i18n] logOutputEncoding = ISO-8859-1
如果您沒有這個組態變數,則會改用
i18n.commitEncoding
的值。
請注意,我們刻意選擇在進行提交時不重新編碼提交日誌訊息以強制提交物件層級使用 UTF-8,因為重新編碼為 UTF-8 不一定是可逆的操作。
GIT
屬於 git[1] 套件的一部分