セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット取得
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣習
- 日常的なGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
低レベルコマンド
-
2.49.0
2025-03-14
- 2.45.1 → 2.48.1 変更なし
-
2.45.0
2024-04-29
- 2.43.1 → 2.44.3 変更なし
-
2.43.0
2023-11-20
- 2.35.1 → 2.42.4 変更なし
-
2.35.0
2022-01-24
- 2.31.1 → 2.34.8 変更なし
-
2.31.0
2021-03-15
- 2.27.1 → 2.30.9 変更なし
-
2.27.0
2020-06-01
- 2.25.2 → 2.26.3 変更なし
- 2.25.1 変更なし
- 2.22.1 → 2.25.0 変更なし
-
2.22.0
2019-06-07
- 2.14.6 → 2.21.4 変更なし
-
2.13.7
2018-05-22
- 2.12.5 変更なし
-
2.11.4
2017-09-22
- 2.10.5 変更なし
-
2.9.5
2017-07-30
- 2.7.6 → 2.8.6 変更なし
-
2.6.7
2017-05-05
- 2.5.6 変更なし
-
2.4.12
2017-05-05
- 2.1.4 → 2.3.10 変更なし
-
2.0.5
2014-12-17
概要
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[<keyid>]
- --gpg-sign[=<keyid>]
- --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.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はコアレベルではパス名を単に非NULLバイトのシーケンスとして扱います(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のコアと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] スイートの一部