# git-commit-tree
> 原文: [https://git-scm.com/docs/git-commit-tree](https://git-scm.com/docs/git-commit-tree)
## 名稱
git-commit-tree - 創建一個新的提交對象
## 概要
```
git commit-tree <tree> [(-p <parent>)…?]
git commit-tree [(-p <parent>)…?] [-S[<keyid>]] [(-m <message>)…?]
[(-F <file>)…?] <tree>
```
## 描述
這通常不是最終用戶想要直接運行的。參見 [git-commit [1]](https://git-scm.com/docs/git-commit) 。
基于提供的樹對象創建新的提交對象,并在stdout上發出新的提交對象ID。除非給出`-m`或`-F`選項,否則將從標準輸入讀取日志消息。
提交對象可以包含任意數量的父項。只有一個父,它是一個普通的提交。擁有多個父級會使提交在多行歷史記錄之間合并。初始(root)提交沒有父母。
雖然樹表示工作目錄的特定目錄狀態,但提交在“時間”中表示該狀態,并說明如何到達那里。
通常一個提交會識別一個新的“HEAD”狀態,而Git并不關心你在哪里保存關于該狀態的注釋,實際上我們傾向于只將結果寫入`.git/HEAD`所指向的文件,所以我們總能看到最后承諾的狀態是什么。
## OPTIONS
```
<tree>
```
現有的樹對象
```
-p <parent>
```
每個`-p`表示父提交對象的id。
```
-m <message>
```
提交日志消息中的段落。這可以被給予不止一次并且每個<消息>成為自己的段落。
```
-F <file>
```
從給定文件中讀取提交日志消息。使用`-`從標準輸入讀取。
```
-S[<keyid>]
```
```
--gpg-sign[=<keyid>]
```
GPG簽名提交。 `keyid`參數是可選的,默認為提交者標識;如果指定,它必須粘在沒有空格的選項上。
```
--no-gpg-sign
```
不要GPG簽名提交,以反擊命令行先前給出的`--gpg-sign`選項。
## 提交信息
提交封裝:
* 所有父對象id
* 作者姓名,電子郵件和日期
* 提交者姓名和電子郵件以及提交時間。
在命令行上提供父對象ID時,作者和提交者信息取自以下環境變量,如果設置:
```
GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_AUTHOR_DATE
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL
GIT_COMMITTER_DATE
```
(nb“<”,“>”和“\ n”s被剝離)
如果未設置(某些)這些環境變量,則從配置項user.name和user.email獲取信息,如果不存在,則獲取環境變量EMAIL,或者,如果未設置,則系統用戶用于發送郵件的名稱和主機名(取自`/etc/mailname`并在該文件不存在時回退到完全限定的主機名)。
從stdin讀取提交注釋。如果未通過“<”提供更改日志條目重定向, _git commit-tree_ 將等待一個輸入并終止于^ D.
## 日期格式
`GIT_AUTHOR_DATE`,`GIT_COMMITTER_DATE`環境變量支持以下日期格式:
```
Git internal format
```
它是`<unix timestamp> <time zone offset>`,其中`<unix timestamp>`是自UNIX紀元以來的秒數。 `<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`字符。
| 注意 | 此外,日期部分以下列格式接受:`YYYY.MM.DD`,`MM/DD/YYYY`和`DD.MM.YYYY`。 |
## 討論
Git在某種程度上是字符編碼不可知的。
* blob對象的內容是未解釋的字節序列。核心級別沒有編碼轉換。
* 路徑名以UTF-8規范化形式C編碼。這適用于樹對象,索引文件,ref名稱,以及命令行參數,環境變量和配置文件中的路徑名(`.git/config`(參見 [git) -config [1]](https://git-scm.com/docs/git-config) ), [gitignore [5]](https://git-scm.com/docs/gitignore) , [gitattributes [5]](https://git-scm.com/docs/gitattributes) 和 [gitmodules [5]](https://git-scm.com/docs/gitmodules) )。
請注意,核心級別的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瓷器都不是為了強制項目使用UTF-8。如果特定項目的所有參與者發現使用遺留編碼更方便,Git不會禁止它。但是,有一些事情需要牢記。
1. _git commit_ 和 _git commit-tree_ 發出警告,如果提供給它的提交日志消息看起來不像有效的UTF-8字符串,除非你明確說你的項目使用了遺產編碼。說這個的方法是在`.git/config`文件中使用i18n.commitencoding,如下所示:
```
[i18n]
commitEncoding = ISO-8859-1
```
使用上述設置創建的提交對象在其`encoding`標題中記錄`i18n.commitEncoding`的值。這是為了幫助其他人以后再看。缺少此標頭意味著提交日志消息以UTF-8編碼。
2. _git log_ , _git show_ , _git blame_ 和朋友們查看提交對象的`encoding`頭,并嘗試將日志消息重新編碼為除非另有說明,否則為UTF-8。您可以使用`.git/config`文件中的`i18n.logOutputEncoding`指定所需的輸出編碼,如下所示:
```
[i18n]
logOutputEncoding = ISO-8859-1
```
如果您沒有此配置變量,則使用`i18n.commitEncoding`的值。
請注意,我們故意選擇在提交以在提交對象級別強制使用UTF-8時不重新編寫提交日志消息,因為重新編碼為UTF-8不一定是可逆操作。
## FILES
在/ etc /郵件名
## 也可以看看
[git-write-tree [1]](https://git-scm.com/docs/git-write-tree)
## GIT
部分 [git [1]](https://git-scm.com/docs/git) 套件
- git
- git-config
- git-help
- git-init
- git-clone
- git-add
- git-status
- git-diff
- git-commit
- git-reset
- git-rm
- git-mv
- git-branch
- git-checkout
- git-merge
- git-mergetool
- git-log
- git-stash
- git-tag
- git-worktree
- git-fetch
- git-pull
- git-push
- git-remote
- git-submodule
- git-show
- git-log
- git-shortlog
- git-describe
- git-apply
- git-cherry-pick
- git-rebase
- git-revert
- git-bisect
- git-blame
- git-grep
- gitattributes
- giteveryday
- gitglossary
- githooks
- gitignore
- gitmodules
- gitrevisions
- gittutorial
- gitworkflows
- git-am
- git-format-patch
- git-send-email
- git-request-pull
- git-svn
- git-fast-import
- git-clean
- git-gc
- git-fsck
- git-reflog
- git-filter-branch
- git-instaweb
- git-archive
- git-bundle
- git-daemon
- git-update-server-info
- git-cat-file
- git-check-ignore
- git-checkout-index
- git-commit-tree
- git-count-objects
- git-diff-index
- git-for-each-ref
- git-hash-object
- git-ls-files
- git-merge-base
- git-read-tree
- git-rev-list
- git-rev-parse
- git-show-ref
- git-symbolic-ref
- git-update-index
- git-update-ref
- git-verify-pack
- git-write-tree