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].
Создаёт новый объект коммита на основе предоставленного объекта дерева и выводит идентификатор нового объекта коммита в stdout. Сообщение журнала считывается из стандартного ввода, если не указаны параметры -m или -F.
Параметры -m и -F можно указывать любое количество раз и в любом порядке. Сообщение журнала коммита будет составлено в порядке указания параметров.
Объект коммита может иметь любое количество родителей. При наличии ровно одного родителя это обычный коммит. Наличие более чем одного родителя означает, что коммит является слиянием нескольких линий истории. Начальные (корневые) коммиты не имеют родителей.
Если дерево представляет определённое состояние каталога рабочей копии, то коммит представляет это состояние во «времени» и объясняет, как его получить.
Обычно коммит идентифицирует новое состояние «HEAD». Git не важно, где сохраняется запись об этом состоянии, но на практике результат обычно записывают в файл, на который указывает .git/HEAD, чтобы всегда можно было увидеть состояние последнего коммита.
Параметры
- <tree>
-
Существующий объект дерева.
- -p <parent>
-
Каждый
-pуказывает идентификатор родительского объекта коммита. - -m <message>
-
Абзац сообщения журнала коммита. Его можно указать несколько раз; каждое значение <message> становится отдельным абзацем.
- -F <file>
-
Считывать сообщение журнала коммита из указанного файла. Используйте
-, чтобы считывать данные из стандартного ввода. Этот параметр можно указать несколько раз; содержимое каждого файла становится отдельным абзацем. - -S[<keyid>]
- --gpg-sign[=<keyid>]
- --no-gpg-sign
-
Подписывать коммиты с помощью GPG. Аргумент
keyidнеобязателен; по умолчанию используется идентификатор автора коммита. Если аргумент указан, он должен непосредственно следовать за параметром, без пробела. Параметр--no-gpg-signполезен для отмены действия ранее указанного в командной строке параметра--gpg-sign.
Информация о коммите
Коммит содержит:
-
идентификаторы всех родительских объектов
-
имя, адрес электронной почты и дату автора
-
имя и адрес электронной почты создателя коммита, а также время коммита.
Комментарий коммита считывается из stdin. Если запись в журнал изменений не передана с помощью перенаправления «<», git commit-tree будет ждать её ввода и завершения с помощью ^D.
Форматы даты
Переменные окружения GIT_AUTHOR_DATE и GIT_COMMITTER_DATE поддерживают следующие форматы даты:
- Внутренний формат Git
-
Формат <unix-timestamp> <time-zone-offset>, где <unix-timestamp> — количество секунд, прошедших с начала эпохи UNIX. <time-zone-offset> — положительное или отрицательное смещение относительно UTC. Например, CET (на 1 час опережает UTC) — это
+0100.Надёжнее добавлять <unix-timestamp> префикс
@(например,@0+0000), который заставляет Git интерпретировать значение как необработанную временную метку. Это необходимо для значений меньше 100 000 000 (содержащих менее 9 цифр), чтобы избежать путаницы с другими форматами даты, напримерYYYYMMDD. - RFC 2822
-
Стандартный формат даты, описанный в RFC 2822, например
Thu,07Apr200522: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 и многие другие, но
notUTF-16/32, EBCDIC и многобайтные кодировки CJK (GBK, Shift-JIS, Big5, EUC-x, CP9xx и т. д.).
Хотя мы рекомендуем кодировать сообщения журнала коммитов в UTF-8, и базовая система, и Git Porcelain разработаны так, чтобы не навязывать UTF-8 проектам. Если всем участникам проекта удобнее использовать устаревшие кодировки, Git этого не запрещает. Однако следует учитывать несколько моментов.
-
gitcommitиgitcommit-treeвыдают предупреждение, если переданное им сообщение журнала коммита не похоже на допустимую строку UTF-8, кроме случаев, когда явно указано, что в проекте используется устаревшая кодировка. Для этого в файле.git/configнужно задатьi18n.commitEncoding, например:[i18n] commitEncoding = ISO-8859-1Объекты коммитов, созданные с указанной выше настройкой, содержат значение
i18n.commitEncodingв заголовкеencoding. Это помогает другим пользователям, которые будут просматривать их позднее. Отсутствие этого заголовка означает, что сообщение журнала коммита закодировано в UTF-8. -
gitlog,gitshow,gitblameи аналогичные команды проверяют заголовокencodingобъекта коммита и пытаются перекодировать сообщение журнала в UTF-8, если не указано иное. Желаемую кодировку вывода можно задать с помощьюi18n.logOutputEncodingв файле.git/config, например:[i18n] logOutputEncoding = ISO-8859-1Если эта переменная конфигурации не задана, вместо неё используется значение
i18n.commitEncoding.
Обратите внимание: мы намеренно не стали перекодировать сообщение журнала коммита при создании коммита, чтобы принудительно использовать UTF-8 на уровне объекта коммита, поскольку преобразование в UTF-8 не всегда обратимо.
Файлы
/etc/mailname
См. также
commit-tree
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-commit-tree