Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.51.1 → 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.49.1 no changes
-
2.49.0
2025-03-14
- 2.46.2 → 2.48.2 no changes
-
2.46.1
2024-09-13
- 2.45.1 → 2.46.0 no changes
-
2.45.0
2024-04-29
- 2.43.2 → 2.44.4 no changes
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 no changes
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 no changes
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 no changes
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 no changes
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 no changes
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 no changes
-
2.27.0
2020-06-01
- 2.25.2 → 2.26.3 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 no changes
-
2.23.0
2019-08-16
- 2.21.1 → 2.22.5 no changes
-
2.21.0
2019-02-24
- 2.17.0 → 2.20.5 no changes
-
2.16.6
2019-12-06
- 2.14.6 → 2.15.4 no changes
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
- 2.8.6 no changes
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.5.6 no changes
-
2.4.12
2017-05-05
- 2.3.10 no changes
-
2.2.3
2015-09-04
- 2.1.4 no changes
-
2.0.5
2014-12-17
ОБЗОР
gitcommit[-a|--interactive|--patch] [-s] [-v] [-u[<режим>]] [--amend] [--dry-run] <коммит>] [-F<файл> |-m<сообщение>] [--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify] [-e] [--author=<автор>] [--date=<дата>] [--cleanup=<режим>] [--[no-]status] [-i|-o] [--pathspec-from-file=<файл> [--pathspec-file-nul]] [(--trailer<лексема>[(=|:)<значение>])…] [-S[<id-ключа>]] [--] [<спецификатор-пути>…]
ОПИСАНИЕ
Создать новый коммит, в котором будет текущее содержимое индекса и заданное сообщение журнала, описывающее изменения. Новый коммит будет прямым потомком HEAD, как правило, верхушки текущей ветки, и ветвь будет обновлена, чтобы указать на него (если с рабочей копией связана какая-либо ветка, т.е. в том случае, если указатель HEAD не является «отсоединённым», как описано в git-checkout[1]).
Содержание, которое должно быть зафиксировано, может быть указано несколькими способами:
-
с помощью git-add[1] для пошагового добавления ("add") изменений в индекс, до запуска команды
commit(Примечание: даже изменённые файлы должны быть «добавлены»); -
с помощью git-rm[1] для удаления файлов из рабочего каталога и индекса, также до запуска команды
commit; -
указанием списка файлов в качестве аргументов команде
commit(без указания параметров--interactiveили--patch); в этом случае, коммит будет игнорировать изменения, добавленные в индекс, и вместо этого запишет текущее содержимое указанных файлов (которые уже должны быть известны Git); -
с помощью ключа
-aкомандыcommitдля автоматического добавления "add" изменений из всех известных файлов (т.е. всех файлов, которые уже есть в индексе) и для автоматического удаления "rm" файлов в индексе, которые были удалены в рабочей копии, а затем собственно выполнения фиксации изменений; -
с помощью ключей
--interactiveили--patchкомандыcommit, чтобы принимать решение по каждому отдельному файлу или блоку кода, один за другим, какие из них должны быть частью коммита (в дополнение к тому, что уже содержится в индексе), прежде чем завершить операцию. См. раздел «Интерактивный режим» git-add[1], чтобы научиться работать в этом режиме.
Параметр --dry-run можно использовать для получения сводки того, какие изменения были включены в следующий коммит при использовании любого из вышеперечисленных способов, указав в командной строке тот же самый набор аргументов (параметров и путей).
Если вы сделаете коммит и сразу после этого заметите какую-либо ошибку, то изменения можно будет откатить с помощью git reset.
ПАРАМЕТРЫ
-
-a -
--all -
Автоматически индексировать файлы, которые были изменены и удалены, но новые файлы, о которых вы ещё ничего не говорили Git не будут затронуты.
-
-p -
--patch -
Использовать интерактивный интерфейс выбора изменений, чтобы отобрать, какие изменения фиксировать. См. git-add[1].
|
Warning
|
Missing See original version for this content. |
-
-C<коммит> -
--reuse-message=<коммит> -
Взять существующий <коммит> и повторно использовать его сообщение и информацию об авторе (включая метку времени) при создании нового коммита.
-
-c<коммит> -
--reedit-message=<коммит> -
Как и
-C, но с-cбудет запущен редактор, так что пользователь может дополнительно отредактировать сообщение коммита. -
--fixup=[(amend|reword):]<коммит> -
Создаёт новый коммит, который «подправляет» уже существующий <коммит>, при совместном использовании с git rebase» --autosquash. Просто
--fixup=<коммит> создаёт "fixup!"-коммит, что изменит содержимое <коммита>, но не затронет его сообщение.--fixup=amend:<коммит> аналогичен, но создаёт "amend!"-коммит, который также заменяет сообщение <коммита> на сообщение "amend!"-коммита.--fixup=reword:<коммит> также создаёт "amend!"-коммит, но который заменяет только сообщение <коммита> на собственное, но не вносит никаких изменений в содержимое самого <коммита>.У коммитов, созданных простым
--fixup=<коммит>, в качестве заголовка (первой строки коммита) используется строка, состоящая из "fixup!", за которым следует строка заголовка <коммита>, которуюgitrebase--autosquashобрабатывает специальным образом. С помощью параметра-mможно добавить какое-либо сообщение к создаваемому коммиту, но этот дополнительный комментарий будет отброшен, как только "fixup!"-коммит будет объединён с <коммитом> при выполненииgitrebase--autosquash.Коммит, созданный
--fixup=amend:<коммит>, аналогичен, но в начале его заголовка добавляется "amend!". Сообщение <коммита> копируется в сообщение "amend!"-коммита и открывается редактор, в котором это сообщение можно изменить. Когдаgitrebase--autosquashобъединяет "amend!"-коммит с <коммитом>, сообщение <коммита> заменяется отредактированным сообщением "amend!"-коммита. Пустое сообщение в "amend!"-коммите является ошибкой, если только не указан параметр--allow-empty-message.--fixup=reword:<коммит> является короткой записью для--fixup=amend:<коммит>--only. Он создаёт "amend!"-коммит, содержащий только сообщение коммита (игнорирую любые изменения, внесённые в индекс). Когдаgitrebase--autosquashобъединит его с исходным <коммитом>, он заменит сообщение <коммита>, но не произведёт никаких других изменений.При выполнении
gitrebase--autosquash, ни "fixup!", ни "amend!" не изменяют информацию об авторстве <коммита>. См. подробности в git-rebase[1]. -
--squash=<коммит> -
Создать сообщение коммита для использования в
gitrebase--autosquash. Строка заголовка коммита берётся из указанного коммита и дополняется префиксом "squash!". Этот параметр можно использовать совместно с параметрами, изменяющими сообщение коммита (-m/-c/-C/-F). См. подробности в git-rebase[1]. -
--reset-author -
При использовании с параметрами
-C/-c/--amendили при создании коммита после разрешения конфликта при черри-пикинге, объявляет что авторство полученного коммита теперь принадлежит коммитеру. Это также обновляет метку времени создания коммита. -
--short -
При выполнении пробного запуска, выводить информацию в коротком формате. См. подробности в git-status[1]. Подразумевает
--dry-run. -
--branch -
Показывать ветку (и какую внешнюю ветку она отслеживает) даже в коротком формате.
-
--porcelain -
При выполнении пробного запуска, выводить информацию в машиночитаемом «фарфоровом» формате. См. подробности в git-status[1]. Подразумевает
--dry-run. -
--long -
При выполнении пробного запуска, выводить информацию в длинном формате. Подразумевает
--dry-run. -
-z -
--null -
При выводе информации в коротком (
short) или машиночитаемом (porcelain) формате, печатать имя файла дословно и завершать вывод символом NUL вместо LF. Если формат вывода на был указан, то подразумевается--porcelain. Без параметра-z«необычные» символы в именах файлов берутся в кавычки, как это описано для переменной конфигурацииcore.quotePath(см. git-config[1]). -
-F<файл> -
--file=<файл> -
Взять сообщение коммита из <файла>. Используйте "-" для того, чтобы прочитать сообщение из стандартного ввода.
-
--author=<автор> -
Переопределить автора коммита. Чтобы задать автора явно, используйте стандартный формат: А В Тор <author@example.com>. В противном случае значение <автор> считается шаблоном, который используется для поиска какого-либо существующего коммита этого автора (т.е.
gitrev-list--all-i--author=<автор>); информация об авторе затем будет скопирован с первого такого найденного коммита. -
--date=<дата> -
Переопределить дату создания, используемую в коммите.
-
-m<сообщение> -
--message=<сообщение> -
Использовать <сообщение> в качестве сообщения коммита. Если параметр
-mзадан несколько раз, то их значения объединяются, как отдельные абзацы.Параметр
-mявляется взаимоисключающим с-c,-Cи-F. -
-t<файл> -
--template=<файл> -
При редактировании сообщения коммита, запускать редактор изначально с содержимым <файла>. Чтобы задать этот параметр опосредованно часто используется переменная конфигурации commit.template'. Этот механизм может использоваться проектами, которые хотят дать своим участникам некоторые подсказки, что следует писать в сообщениях коммитов и в каком порядке. Если пользователь выходит из редактора, не отредактировав сообщение, коммит отменяется. Этот параметр не имеет никакого эффекта, если сообщение задаётся другими средствами, например, с помощью `-m или
-F. -
-s -
--signoff -
--no-signoff -
Добавить завершитель
Signed-off-byв конец сообщения коммита. Смысл этого действия зависит от проекта, с которым вы сотрудничаете. Например, это может удостоверять, что коммиттер имеет все права на то, чтобы предоставить данную работу в проект под его лицензией, или что он соглашается с каким-нибудь соглашением участника, вроде Сертификата Происхождения Разработчика (тот что используется в проектах Linux и Git см. в https://developercertificate.org). Проконсультируйтесь с документацией или руководством проекта, в который вы хотите внести свой вклад, чтобы понять, какой именно смысл эта приписка имеет в конкретном проекте.С помощью параметра
--no-signoffможно отменить параметр--signoff, указанный раннее в командной строке.
-
--trailer<лексема>[(=|:)<значение>] -
Задаёт пару (<лексема>,<значение>), которая должна быть добавлена в качестве завершителя. (например, git commit --trailer "Signed-off-by:К О Миттер <committer@example.com>" --trailer "Helped-by:К О Миттер <committer@example.com>" добавит завершители
Signed-off-byиHelped-byк сообщению коммита). Определить, какое должно быть поведение в случае, если завершитель применяется несколько раз или в каком порядке они должны идти, а также другие детали можно с помощью семейства конфигурационных переменныхtrailer.*(См. git-interpret-trailers[1]). -
-n -
--[no-]verify -
Не запускать перехватчики вызовов pre-commit и commit-msg. См. также githooks[5].
-
--allow-empty -
Обычно запись коммита, с точно таким же деревом каталогов, как и у его (единственного) родителя, является ошибкой, и данная команда не даст вам создать такой коммит. Данный параметр позволяет обойти это ограничение; в основном он используется в сценариях, взаимодействующих c другими СКВ.
-
--allow-empty-message -
Создать коммит с пустым сообщением без использования низкоуровневых команд, таких как git-commit-tree[1]. Как и
--allow-empty, эта команда в основном используется в основном он используется в сценариях, взаимодействующих c другими СКВ. -
--cleanup=<режим> -
Задать, каким образом предоставленное сообщение коммита должно быть очищено перед тем, как собственно произвести коммит. <режим> может быть одним из:
strip,whitespace,verbatim,scissorsилиdefault.-
strip -
Удалять начальные и конечные пустые строки, лишние конечные пробелы, комментарии, а также лишние последовательные пустые строки.
-
whitespace -
То же, что и
strip, но #комментарии не удаляются. -
verbatim -
Не производить ни какие изменения сообщения коммита.
-
scissors -
То же, что и
whitespace, но, если сообщение было получено из редактора, то всё, что находится ниже следующей строки (включая саму строку), будет обрезано. Символ комментария «#» можно изменить в переменной конфигурацииcore.commentChar.# ------------------------ >8 ------------------------
-
default -
Если сообщение было получено из редактора, то то же, что и
strip. Иначе —whitespace.
Значение по умолчанию может быть изменено в переменной конфигурации
commit.cleanup(cм. git-config[1]). -
-
-e -
--edit -
Позволить пользователю дополнительно редактировать сообщение, взятое из <файла> с помощью
-F<файл>, из командной строки с-m<сообщение> или из коммита с-C<коммит>. -
--no-edit -
Использовать выбранное сообщение коммита и не запускать редактор для его правки. Например,
gitcommit--amend--no-editисправит коммит без изменения его сообщения. -
--amend -
Заменить верхушку текущей ветки, создав новый коммит. Перед коммитом дерево подготавливается как обычно (включая эффект от параметров
-iи-oи от явно заданных спецификаторов пути) и, если никакого сообщения не было задано в командной строке с помощью таких параметров, как-m,-F,-cи т.п., то сообщение от исходного коммита используется в качестве отправной точки (вместо пустого сообщения). Новый коммит имеет тех же родителей и автора, что и текущий (с параметром--reset-authorего также можно изменить).Это является грубым эквивалентом для:
$ git reset --soft HEAD^ $ ... сделайте что-нибудь, чтобы привести дерево в порядок ... $ git commit -c ORIG_HEAD
но может также использоваться для исправления коммита слияния.
Если вы исправляете коммит, который уже был опубликован, то вы должны понимать все последствия переписывания истории. (См. раздел «ВОССТАНОВЛЕНИЕ ПОСЛЕ REBASE В ВЫШЕСТОЯЩЕМ РЕПОЗИТОРИИ» в git-rebase[1].)
-
--no-post-rewrite -
Пропустить перехватчик
post-rewrite. -
-i -
--include -
Прежде чем сделать коммит того, что уже проиндексировано на данный момент, проиндексировать также и содержимое путей, указанных в командной строке. Обычно это не то, что вы хотите сделать, но это может быть полезно, когда вы завершаете слияние в ходе которого возникали конфликты.
-
-o -
--only -
Сделать коммит, взяв только обновлённое содержание путей рабочего каталога, указанных в командной строке, не принимая во внимание ни какое содержимое, проиндексированное по других путям. Если в командной строке указаны какие-либо пути, то это режим работы
gitcommitпо умолчанию; в таком случае этот параметр может быть опущен. Если этот параметр используется совместно с--amend, то указывать пути не обязательно, что можно использовать для внесения изменений в последний коммит, не добавляя к нему уже проиндексированные изменения. Если параметр используется совместно с--allow-empty, указывать пути также не обязательно; в таком случае будет создан пустой коммит. -
--pathspec-from-file=<файл> -
Передать спецификатор пути через <файл>, а не в аргументах командной строки. Если в качестве <файла> указано в точности
-, то используется стандартный поток ввода. Элементы спецификатора пути отделяются друг от друга символами LF или CR/LF. Элементы спецификатора пути могут указываться в кавычках, как это описано для переменной конфигурацииcore.quotePath(см. git-config[1]). См. также--pathspec-file-nulи глобальный параметр--literal-pathspecs. -
--pathspec-file-nul -
Имеет значение только при указании
--pathspec-from-file. Элементы спецификатора пути отделяются друг от друга с помощью NUL-символа, а все остальные символы интерпретируются буквально (включая кавычки и переводы строк). -
-u[<режим>] -
--untracked-files[=<режим>] -
Отображать неотслеживаемые файлы.
Аргумент <режим> является необязательным (по умолчанию:
all) и используется для указания того, как обрабатывать неотслеживаемые файлы; когда-uне используется, значение по умолчанию:normal, т.е. показывать неотслеживаемые файлы и каталоги.Возможные значения аргумента:
Все обычные значения для логических величин для истины вроде
trueрассматриваются какnormalи для лжи вродеfalse— какno. Значение по умолчанию можно изменить с помощью переменной конфигурацииstatus.showUntrackedFiles, описанной в git-config[1]. -
-v -
--verbose -
Показывать список изменений (в унифицированном формате) между
HEADи тем, что будет закоммичено в конце шаблона сообщения коммита, дабы помочь пользователю описать коммит, напомнив какие изменения в нём содержатся. Обратите внимание, что в этом списке сравнения перед началом строк добавляется символ#, так что этот список изменений не будет частью сообщения коммита. См. переменную конфигурацииcommit.verboseв git-config[1].Если этот параметр указан дважды, в дополнение к этому показать список изменений между тем что будет закоммичено и текущем состоянием рабочего каталога, т.е. изменения в отслеживаемых файлах, которые не были проиндексированы.
-
-q -
--quiet -
Не выводить сводку изменений коммита.
-
--dry-run -
Не создавать коммит, но показать список путей, которые будут закоммичены, пути с локальными изменениями, которые не будут добавлены в коммит, и пути, которые не отслеживаются.
-
--status -
Включить вывод git-status[1] в шаблон сообщения коммита при использовании редактора для подготовки сообщения. По умолчанию этот параметр включён, но может быть использован для переопределения поведения задаваемого переменной конфигурации
commit.status. -
--no-status -
Не включать вывод git-status[1] в шаблон сообщения коммита при использовании редактора для подготовки сообщения.
-
-S[<id-ключа>] -
--gpg-sign[=<id-ключа>] -
--no-gpg-sign -
Подписывать коммиты с помощью GPG. Указывать <id-ключа> необязательно, и если он не указан, в качестве значения по умолчанию будет использоваться личное имя коммиттера; если аргумент указан, он должен следовать сразу после параметра, без пробела. Параметр
--no-gpg-signполезен, если нужно отменить переменную конфигурацииcommit.gpgSignили параметр--gpg-sign, заданный ранее. -
-- -
Не рассматривать остальные аргументы командной строки в качестве параметров.
- <спецификатор-пути>…
-
Когда в командной строке указан <спецификатор-пути>, в коммит добавляется содержимое файлов, соответствующих этому спецификатору, другие изменения, добавленные в индекс, не будут включены в коммит. Изменения, которые уже находятся в индексе, но небыли зафиксированы останутся в индексе и могут быть зафиксированы следующим коммитом.
Более подробно описание см. в параграфе спецификатор пути (pathspec) в gitglossary[7].
ПРИМЕРЫ
Когда вы записываете свою работу, содержимое модифицированных файлов в вашем рабочем каталоге временно сохраняется (с помощью git add) в буферную зону, называемую «индексом». Можно отменить изменения добавленные в индекс для конкретного файла (изменения только в индексе, но не в рабочем каталоге), к состоянию последнего коммита с помощью git restore --staged <файл>, что фактически отменяет эффект произведённый git add и исключает изменениям в этом файле из следующего коммита. После приведение индекса в то состояние, которое должно быть закомиченно (с помощью последовательного выполнения этих команд), созданное к этому моменту состояние может быть зафиксировано с помощью git commit (без какого-либо аргументов с путями). Это самая основная форма данной команды. Пример:
$ edit hello.c # отредактируйте файл $ git rm goodbye.c $ git add hello.c $ git commit
Вместо того чтобы вручную индексировать файлы после каждого отдельного изменения, вы можете сказать git commit, чтобы он сам нашёл изменения в файлах (содержимое которых отслеживается в вашем рабочей копии) и сделал соответствующее git add и git add за вас. То есть, этот пример делает то же самое, что и предыдущий пример, если в вашем рабочем каталоге не было ни каких других изменений:
$ edit hello.c # отредактируйте файл $ rm goodbye.c # удалите файл $ git commit -a
Команда git commit -a сначала смотрит на вашу рабочую копию, замечает, что вы изменили hello.c и удалили goodbye.c, и сама выполняет необходимые git add и git rm за вас.
После внесения изменений в несколько файлов, вы можете изменить порядок, в котором изменения записываются в историю, передав git commit, пути к файлом. Когда команде передаются имена путей, она делает коммит, который содержит только изменения, внесённые в указанные файлы:
$ edit hello.c hello.h # отредактировать файлы $ git add hello.c hello.h $ edit Makefile # отредактировать другой файл $ git commit Makefile
Это создаёт коммит, который фиксирует изменение только в Makefile. Проиндексированные изменения в hello.c и hello.h в полученный коммит, не включаются. Однако эти изменения не теряются: они всё ещё находятся в индексе и всего лишь придержаны на время. После приведённой последовательности команд, если вы сделаете:
$ git commit
этот второй коммит зафиксирует изменения в ‘hello.c’ и ‘hello.h’, как и ожидалось.
После того как слияние (начатого git merge или git pull) будет остановлено из-за конфликта, файлы, которые были удачно слиты уже проиндексированы для коммита за вас, а файлы, в которых есть конфликты остаются в не слитом состоянии. Вы должны сначала проверить, в каких файлах есть конфликты с помощью git status, а после того, как вы исправите их вручную в вашем рабочем каталоге, вы можете проиндексировать результат как обычно, с помощью git add:
$ git status | grep unmerged unmerged: hello.c $ edit hello.c # отредактируйте файл $ git add hello.c
После разрешения конфликтов и индексирования результата, git ls-files -u перестанет выводить пути по которым есть конфликты. Когда вы закончите, выполните git commit, чтобы, наконец, зафиксировать слияние:
$ git commit
Как и в случае с фиксацией своих собственных изменений, вы можете использовать параметр -a, если хотите сэкономить несколько нажатий на клавиши. Одно из различий заключается в том, что во время разрешения слияния вы не можете передавать git commit именами путей в качестве аргументов, дабы изменить порядок, в котором фиксируются изменения, потому что слияние должно быть записано как единый коммит. На самом деле, команда даже откажется запускаться при передаче путей в качестве аргументов (но см. параметр -i).
ИНФОРМАЦИЯ ДЛЯ КОММИТА
Информация об авторе и коммиттере берётся из следующих переменных среды, если они установлены:
-
GIT_AUTHOR_NAME -
GIT_AUTHOR_EMAIL -
GIT_AUTHOR_DATE -
GIT_COMMITTER_NAME -
GIT_COMMITTER_EMAIL -
GIT_COMMITTER_DATE
(следует отметить, что "<", ">" и "\n" удаляются)
Имена автора и коммиттера по общепринятым нормам являются той или иной формой личного имени (т.е. именем, по которому другие люди обращаются к вам), однако Git и не заставляет вас придерживаться какой-либо конкретной формы. Могут использоваться произвольные символы Unicode (с учётом ограничений, перечисленных выше). Это имя ни как не влияет на аутентификацию; для этого см. описание переменной credential.username в git-config[1].
В случае если эти переменные среды (или некоторые из них) не установлены, информация берётся из переменных конфигурации user.name и user.email; или, если они также не установлены, из переменной среды EMAIL; или, если и она не установлена, из имени пользователя системы, а для исходящей почты используется имя хоста (из /etc/mailname или, если этого файла не существуют, из полного имени хоста).
author.name и committer.name и соответствующие им переменные конфигурации для электронной почты переопределяют user.name и user.email, если они установлены, а сами они в свою очередь переопределяются переменными среды.
Типичное использование — установить только переменные конфигурации `user.name и `user.email; остальные опции предусмотрены для более сложных вариантов использования.
ФОРМАТЫ ДАТЫ
Переменные среды GIT_AUTHOR_DATE и GIT_COMMITTER_DATE поддерживают следующие форматы дат:
- Внутренний формат Git
-
<unix-timestamp> <time-zone-offset>, где <unix-timestamp> — количество секунд, прошедших с эпохи UNIX (00:00:00 UTC 1 января 1970 года). А <time-zone-offset> является положительным или отрицательным смещением относительно UTC. Например, для CET (центральноевропейское время которое на 1 час опережает UTC) значение будет
+0100. - RFC 2822
-
Стандартный формат даты, описанный RFC 2822, например,
Thu,07Apr200522:13:13+0200. - ISO 8601
-
Время и дата, согласно стандарту ISO 8601, например, 2005-04-07T22:13:13'. Принимается также пробел вместо `Т. Дробные доли секунды будут отброшены, например ‘2005-04-07T22:13:13.019’ будет восприниматься как ‘2005-04-07T22:13:13’.
NoteКроме того, часть представляющая дату принимается в следующих форматах: ГГГГ.ММ.ДД, ММ/ДД/ГГГГ и ДД.ММ.ГГГГ.
В дополнение к форматам даты перечисленным выше, параметр --date также попытается распознать и другие, более ориентированные на человека, форматы дат такие, как относительные даты, вроде "yesterday" («вчера») или "last Friday at noon" («в прошлую пятницу в полдень»).
ОБСУЖДЕНИЕ
Хотя это, строго говоря, и не требуется, хорошей идеей является начинать сообщение коммита с одной короткой (не более 50 символов) строки, резюмирующей изменения, за этой строкой обычно следует одна пустая строка, а затем более подробное описание. Текст до первой пустой строки в сообщении коммита рассматривается как его заголовок, и этот заголовок используется в Git во многих местах. Например, git-format-patch[1], который превращает коммит в сообщение электронной почты, использует этот заголовок в качестве Темы письма, а остальное содержимое коммита — в качестве тела.
Git до некоторой степени агностичен в отношении кодировок символов.
-
Содержимое blob-объектов — простая последовательность байтов, которая ни как не интерпретируется особым образом. На уровне ядра Git ни какая перекодировка не производится.
-
Пути кодируются в UTF-8 в форме нормализации C. Это относится к объектам-деревьям, файлу индекса, именам ссылок, а также к путям в аргументах командной строки, переменных среды и файлах конфигурации (
.git/config(см. git-config[1]), gitignore[5], gitattributes[5] и gitmodules[5]).Обратите внимание, что Git на базовом уровне рассматривает имена путей просто как последовательности ненулевых байтов, ни каких перекодировок путей не происходит (за исключением 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 не запрещает это. Однако есть несколько моментов, которые стоит иметь в виду.
-
gitcommitиgitcommit-treeбудут выдавать предупреждение, если переданное ему сообщение коммита не похоже на корректную строку UTF-8, если только вы явно не объявили, что ваш проект использует устаревшую кодировку. Это можно сделать, добавив переменную конфигурацииi18n.commitEncodingв файл.git/config, например:[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 не обязательно является обратимой операцией.
ПЕРЕМЕННЫЕ СРЕДЫ И КОНФИГУАЦИИ
Редактор, используемый для редактирования сообщения коммита, будет взят из (в порядки приоритетности) переменной среды GIT_EDITOR, переменной конфигурации core.editor, переменной среды VISUAL или переменной среды EDITOR. См. подробности в git-var[1].
Дальнейшее содержание этого раздела (в отличие от того, что было описано до данной строки), повторяет то, что может быть найдено в git-config[1]:
|
Warning
|
Missing See original version for this content. |
ПЕРЕХВАТЧИКИ
Эта команда может запускать следующие перехватчики: commit-msg, prepare-commit-msg, pre-commit, post-commit и post-rewrite. См. подробности в githooks[5].
ФАЙЛЫ
-
$GIT_DIR/COMMIT_EDITMSG -
Этот файл содержит сообщение коммита для текущего коммита (который в данный момент находится в процессе создания). Если
gitcommitзавершится с ошибкой до, собственно, создания коммита, то то сообщение коммита, которое пользователь ввёл (например, в редакторе), будет доступно в этом файле, но имейте в виду, что оно будет перезаписано при следующем выполнениеgitcommit.
GIT
Является частью пакета git[1]