Git
English ▾ トピック ▾ 最新バージョン ▾ git-commit-tree は 2.45.0 で最後に更新されました

名前

git-commit-tree - 新しいコミットオブジェクトを作成する

概要

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オプションは、任意の順序で任意の回数指定できます。コミットログメッセージは、オプションが指定された順序で構成されます。

コミットオブジェクトは、任意の数の親を持つことができます。親が1つだけの場合は、通常のコミットです。複数の親を持つと、コミットは複数の履歴のライン間のマージになります。最初の(ルート)コミットには親はありません。

ツリーがワーキングディレクトリの特定のディレクトリ状態を表すのに対し、コミットは「時間」内のその状態を表し、そこに到達する方法を説明します。

通常、コミットは新しい「HEAD」状態を識別し、Gitはあなたがその状態に関するメモをどこに保存するかを気にしませんが、実際には、常に最後にコミットされた状態を確認できるように、結果を.git/HEADが指すファイルに書き込む傾向があります。

オプション

<ツリー>

既存のツリーオブジェクト。

-p <親>

-pは、親コミットオブジェクトのIDを示します。

-m <メッセージ>

コミットログメッセージの段落。これは複数回指定でき、各<メッセージ>は独自の段落になります。

-F <ファイル>

指定されたファイルからコミットログメッセージを読み取ります。標準入力から読み取るには-を使用します。これは複数回指定でき、各ファイルの内容が独自の段落になります。

-S[<キーID>]
--gpg-sign[=<キーID>]
--no-gpg-sign

GPG署名コミット。keyid引数はオプションで、コミッターIDがデフォルトです。指定する場合は、スペースなしでオプションに貼り付ける必要があります。--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エポックからの秒数です。<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.0192005-04-07T22:13:13として扱われます。

注記
さらに、日付部分は、次の形式でも受け入れられます:YYYY.MM.DDMM/DD/YYYY、およびDD.MM.YYYY

議論

Gitは、ある程度文字エンコーディングに依存しません。

  • blobオブジェクトの内容は、解釈されないバイトシーケンスです。コアレベルでは、エンコーディング変換はありません。

  • パス名は、UTF-8正規化形式Cでエンコードされます。これは、ツリーオブジェクト、インデックスファイル、ref名、およびコマンドライン引数、環境変数、および設定ファイル(.git/configgit-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はそれを禁止しません。ただし、いくつかの注意点があります。

  1. git commitgit commit-treeは、プロジェクトがレガシーエンコーディングを使用していることを明示的に指定しない限り、指定されたコミットログメッセージが有効なUTF-8文字列のように見えない場合、警告を発行します。これを示す方法は、.git/configファイルにi18n.commitEncodingを次のように設定することです

    [i18n]
    	commitEncoding = ISO-8859-1

    上記の設定で作成されたコミットオブジェクトは、encodingヘッダーにi18n.commitEncodingの値を記録します。これは、後でそれらを見る他の人を支援するためです。このヘッダーがない場合、コミットログメッセージはUTF-8でエンコードされていることを意味します。

  2. git loggit showgit blameなどの機能は、コミットオブジェクトのencodingヘッダーを見て、特に指定がない限り、ログメッセージをUTF-8に再エンコードしようとします。.git/configファイルにi18n.logOutputEncodingを使用して、目的の出力エンコーディングを指定できます。次のようにします

    [i18n]
    	logOutputEncoding = ISO-8859-1

    この設定変数がない場合は、代わりにi18n.commitEncodingの値が使用されます。

コミットがコミットオブジェクトレベルでUTF-8を強制するために作成されたときに、コミットログメッセージを再エンコードしないことを意図的に選択したことに注意してください。UTF-8への再エンコードは必ずしも可逆的な操作ではないためです。

ファイル

/etc/mailname

GIT

git[1]スイートの一部

scroll-to-top