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.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.47.1 → 2.49.1 no changes
-
2.47.0
2024-10-06
- 2.45.1 → 2.46.4 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 no changes
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 no changes
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.34.1 → 2.40.4 no changes
-
2.34.0
2021-11-15
- 2.31.1 → 2.33.8 no changes
-
2.31.0
2021-03-15
- 2.29.1 → 2.30.9 no changes
-
2.29.0
2020-10-19
- 2.23.1 → 2.28.1 no changes
-
2.23.0
2019-08-16
- 2.21.1 → 2.22.5 no changes
-
2.21.0
2019-02-24
- 2.19.1 → 2.20.5 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 no changes
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
- 2.10.5 → 2.11.4 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
- 2.6.7 no changes
-
2.5.6
2017-05-05
- 2.1.4 → 2.4.12 no changes
-
2.0.5
2014-12-17
СИНОПСИС
git
for-each-ref
[--count=
<count>] [--shell
|--perl
|--python
|--tcl
] [(--sort=
<key>)…] [--format=
<format>] [--include-root-refs
] [--points-at=
<object>] [--merged
[=
<object>]] [--no-merged
[=
<object>]] [--contains
[=
<object>]] [--no-contains
[=
<object>]] [(--exclude=
<pattern>)…] [--start-after=
<marker>] [--stdin
| <pattern>... ]
ОПИС
Перебрати всі посилання, що відповідають <шаблон>, та показати їх відповідно до заданого <формат>, попередньо відсортувавши їх відповідно до заданого набору <ключ>. Якщо задано <кількість>, зупинити після показу такої кількості посилань. Інтерпольовані значення в <формат> можна за бажанням взяти у лапки як рядкові літерали вказаною мовою хоста, що дозволяє їх безпосередню оцінку цією мовою.
ОПЦІЇ
- <pattern>…
-
Якщо задано один або декілька шаблонів, відображаються лише посилання, які відповідають принаймні одному шаблону, або за допомогою fnmatch(3), або буквально, в останньому випадку — повне збігання або збіг від початку до косої риски.
- --stdin
-
Якщо вказано параметр
--stdin
, то список шаблонів зчитується зі стандартного вводу, а не зі списку аргументів. - --count=<count>
-
За замовчуванням команда показує всі посилання, що відповідають <шаблон>. Цей параметр зупиняє її після показу певної кількості посилань.
- --sort=<key>
-
Ім’я поля для сортування. Префікс
-
для сортування у порядку спадання значення. Якщо не вказано, використовуєтьсяrefname
. Ви можете використовувати параметр --sort=<ключ> кілька разів, і в цьому випадку останній ключ стає первинним ключем. - --format=<format>
-
Рядок, який інтерполює %(ім'я поля) з посилання, що відображається, та об’єкта, на який воно вказує. Крім того, рядковий літерал
%%
відображатиметься як%
, а%xx
, деxx
– шістнадцяткові цифри, відображатиметься як символ із шістнадцятковим кодомxx
. Наприклад,%00
інтерполює до \0 (NUL),%09
до \t (TAB), а%0a
до \n (LF).Якщо не вказано, <format> за замовчуванням має значення
%
(name
of
object
)SPC
%
(objecttype
)TAB
%
(refname
). - --color[=<when>]
-
Враховуйте будь-які кольори, зазначені в опції
--format
. Поле <when> має бути одним із значеньalways
,never
абоauto
(якщо <when> відсутнє, поводьтеся так, ніби було вказаноalways
). - --shell
- --perl
- --python
- --tcl
-
Якщо задано, рядки, що замінюють заповнювачі
%
(fieldname
), цитуються як рядкові літерали, що підходять для вказаної мови хоста. Це призначено для створення скриптлета, який можна безпосередньоeval
. - --points-at=<object>
-
Перераховувати лише посилання, які вказують на заданий об’єкт.
- --merged[=<object>]
-
Перераховувати лише ті посилання, підказки яких доступні з вказаного коміту (HEAD, якщо не вказано).
- --no-merged[=<object>]
-
Перераховувати лише посилання, поради яких недоступні з вказаного коміту (HEAD, якщо не вказано).
- --contains[=<object>]
-
Перераховувати лише посилання, які містять вказаний коміт (HEAD, якщо не вказано).
- --no-contains[=<object>]
-
Перераховувати лише посилання, які не містять зазначеного коміту (HEAD, якщо не вказано).
- --ignore-case
-
Сортування та фільтрація посилань не враховують регістр.
- --omit-empty
-
Не друкуйте новий рядок після відформатованих посилань, де формат розгортається до порожнього рядка.
- --exclude=<pattern>
-
Якщо задано один або декілька шаблонів, відображаються лише ті посилання, які не відповідають жодному виключеному шаблону(ам). Зіставлення виконується за тими ж правилами, що й для <шаблон> вище.
- --include-root-refs
-
Перелічіть кореневі посилання (HEAD та псевдопосилання) окремо від звичайних посилань.
- --start-after=<marker>
-
Дозволяє розбивати вивід на сторінки, пропускаючи посилання до зазначеного маркера включно. Під час розбиття на сторінки слід зазначити, що посилання можна видаляти, змінювати або додавати між викликами. Вивід поверне лише ті посилання, які лексикографічно слідують за маркером. Вивід починається з першого посилання, яке йде після маркера в алфавітному порядку. Не можна використовувати з опціями
--sort=
<ключ> або--stdin
, або з аргументом(ами) <шаблон> для обмеження посилань.
НАЗВИ ПОЛІВ
Різні значення зі структурованих полів у об’єктах, на які посилаються, можна використовувати для інтерполяції в результуючий вивід або як ключі сортування.
Для всіх об’єктів можна використовувати такі назви:
- посилання
-
Назва посилання (частина після $GIT_DIR/). Для неоднозначної короткої назви посилання додається
:short
. Опція core.warnAmbiguousRefs використовується для вибору режиму суворого скорочення. Якщо додаєтьсяlstrip=
<N> (rstrip=
<N>), то компоненти шляху, розділені <N>, видаляються з початку (конця) назви посилання (наприклад,%
(refname:lstrip=2
) перетворюєrefs/tags/foo
наfoo
, а%
(refname:rstrip=2
) перетворюєrefs/tags/foo
наrefs
). Якщо <N> – від’ємне число, видаляється стільки компонентів шляху, скільки потрібно, з зазначеного кінця, щоб залишилося-
<N> компонентів шляху (наприклад,%
(refname:lstrip=-2
) перетворюєrefs/tags/foo
наtags/foo
, а%
(refname:rstrip=-1
) перетворюєrefs/tags/foo
наrefs
). Коли посилання не має достатньо компонентів, результат стає порожнім рядком, якщо видаляється з додатним <N>, або він стає повним посиланням, якщо видаляється з від’ємним <N>. Жодне з них не є помилкою.strip
можна використовувати як синонімlstrip
. - тип об’єкта
-
Тип об’єкта (
blob
,tree
,commit
,tag
). - розмір об’єкта
-
Розмір об’єкта (те саме, що й у звітах git cat-file -s). Додайте
:disk
, щоб отримати розмір у байтах, який об’єкт займає на диску. Дивіться примітку щодо розмірів на диску в розділі ЗАСТЕРЕЖЕННЯ нижче. - назва об’єкта
-
Ім’я об’єкта (також відоме як SHA-1). Для неоднозначного скорочення назви об’єкта додайте
:short
. Для скорочення назви об’єкта з бажаною довжиною додайте:short=
<довжина>, де мінімальна довжина дорівнює MINIMUM_ABBREV. Довжину можна перевищити, щоб забезпечити унікальність назв об’єктів. - дельтабаза
-
Це розширюється до назви об’єкта дельта-бази для заданого об’єкта, якщо вона збережена як дельта. В іншому випадку, воно розширюється до нульової назви об’єкта (всі нулі).
- вище за течією
-
Назва локального посилання, яке можна вважати «вище за течією» відносно відображеного посилання. Враховує
:short
,:lstrip
та:rstrip
так само, як іrefname
вище. Додатково враховує:track
для відображення "[ahead N, behind M]" та:trackshort
для відображення скороченої версії: ">" (ahead), "<" (behind), "<>" (ahead та behind) або "=" (синхронізовано).:track
також друкує "[gone]" щоразу, коли зустрічається невідоме посилання вище за течією. Додайте:track,nobracket
для відображення інформації про відстеження без дужок (тобто "ahead N, behind M").Для будь-якої гілки віддаленого відстеження
%
(upstream
),%
(upstream:remotename
) та%
(upstream:remoteref
) посилаються на назву віддаленого об’єкта та назву відстежуваного віддаленого посилання відповідно. Іншими словами, гілку віддаленого відстеження можна оновлювати явно та окремо за допомогою специфікації посилань%
(upstream:remoteref
):%
(upstream
) для вибору з%
(upstream:remotename
).Не має ефекту, якщо посилання не має пов’язаної з ним інформації про відстеження. Усі опції, окрім
nobracket
, є взаємовиключними, але якщо вони використовуються разом, вибирається остання опція. - push
-
Ім’я локального посилання, яке представляє розташування
@{push}
для відображеного посилання. Враховує опції:short
,:lstrip
,:rstrip
,:track
,:trackshort
,:remotename
та:remoteref
, як іupstream
. Створює порожній рядок, якщо посилання@{push}
не налаштовано. - HEAD
-
*, якщо HEAD збігається з поточним посиланням (витягнутою гілкою), ' ' інакше.
- color
-
Змінити колір виводу. Далі йде :<назва кольору>, де назви кольорів описані в розділі "Значення" в розділі "ФАЙЛ КОНФІГУРАЦІЇ" файлу git-config[1]. Наприклад,
%
(color:bold
red
). - вирівняти
-
Вирівнювання вмісту між %(align:…) та %(end) по лівому, середньому або правому краю. Після "align:" йдуть
width=
<width> таposition=
<position> у будь-якому порядку, розділені комою, де <position> позначає ліворуч, праворуч або посередині, за замовчуванням ліворуч, а <width> — це загальна довжина вмісту з вирівнюванням. Для стислості префікси "width=" та/або "position=" можна пропустити, а замість них використовувати лише <width> та <position>. Наприклад,%
(align:
<width>,
<position>). Якщо довжина вмісту більша за ширину, вирівнювання не виконується. Якщо використовується з--quote
, все між %(align:…) та %(end) береться в лапки, але якщо вкладено, то лапки виконується лише на найвищому рівні. - якщо
-
Використовується як %(if)…%(then)…%(end) або %(if)…%(then)…%(else)…%(end). Якщо після %(if) є атом зі значенням або рядковим літералом, то друкується все після %(then), інакше, якщо використовується атом %(else), то друкується все після %(else). Ми ігноруємо пробіли під час обчислення рядка перед %(then), це корисно, коли ми використовуємо атом %(HEAD), який друкує "*" або " ", і ми хочемо застосувати умову if лише до посилання HEAD. Додайте ":equals=<рядок>" або ":notequals=<рядок>", щоб порівняти значення між атомами %(if:…) та %(then) з заданим рядком.
- symref
-
Посилання, на яке посилається задане символічне посилання. Якщо посилання не є символічним, нічого не друкується. Враховує опції
:short
,:lstrip
та:rstrip
так само, як іrefname
вище. - signature
-
GPG-підпис коміту.
- signature:grade
-
Показати «G» для справного (дійсного) підпису, «B» для поганого підпису, «U» для справного підпису з невідомою дійсністю, «X» для справного підпису, термін дії якого минув, «Y» для справного підпису, створеного простроченим ключем, «R» для справного підпису, створеного відкликаним ключем, «E», якщо підпис неможливо перевірити (наприклад, відсутній ключ), та «N» для відсутності підпису.
- signature:signer
-
Підписувач GPG-підпису коміту.
- signature:key
-
Ключ GPG-підпису коміту.
- signature:fingerprint
-
Відбиток GPG-підпису коміта.
- signature:primarykeyfingerprint
-
Відбиток первинного ключа GPG-підпису коміта.
- signature:trustlevel
-
Рівень довіри GPG-сигнатури коміта. Можливі виходи:
ultimate
,fully
,marginal
,never
таundefined
. - робочий шлях
-
Абсолютний шлях до робочого дерева, в якому витягнуто посилання, якщо воно витягнуто в будь-якому зв’язаному робочому дереві. В іншому випадку порожній рядок.
- ahead-behind:<комітетський>
-
Два цілі числа, розділені пробілом, що показують кількість комітів попереду та позаду відповідно, при порівнянні вихідного посилання з <committish>, зазначеним у форматі.
- is-base:<комітетський>
-
Щонайбільше в одному рядку з’явиться (<committish>), щоб вказати посилання, яке, найімовірніше, є тим посиланням, що використовувалося як відправна точка для гілки, що створила <committish>. Цей вибір робиться за допомогою евристики: вибирається посилання, яке мінімізує кількість комітів в історії першого батьківського елемента <committish>, а не в історії першого батьківського елемента посилання.
Наприклад, розглянемо наступний малюнок історій перших батьків для кількох посилань:
*--*--*--*--*--* refs/heads/A \ \ *--*--*--* refs/heads/B \ \ \ \ * * refs/heads/C \ \ *--* refs/heads/D
Тут, якщо
A
,B
таC
– це відфільтровані посилання, а рядок формату –%
(refname
):%
(is-base:D
), то результат буде такимrefs/heads/A: refs/heads/B:(D) refs/heads/C:
Це пояснюється тим, що історія першого батьківського елемента
D
має свій найдавніший перетин з історіями першого батьківського елемента відфільтрованих посилань у спільного першого батьківського елемента-предкаB
таC
, а зв’язки розриваються найдавнішим посиланням у відсортованому порядку.Зверніть увагу, що цей токен не з’явиться, якщо історія першого батьківського елемента <committish> не перетинається з історіями першого батьківського елемента відфільтрованих посилань.
- describe[:опція]
-
Зрозуміле для людини ім’я, наприклад git-describe[1]; порожній рядок для неописуваних комітів. Після рядка
describe
може бути двокрапка та один або кілька параметрів, розділених комами.- tags=<bool-value>
-
Замість того, щоб розглядати лише анотовані теги, розгляньте також легкі теги; див. відповідний параметр у git-describe[1] для отримання детальної інформації.
- abbrev=<number>
-
Використовуйте щонайменше <кількість> шістнадцяткових цифр; див. відповідний параметр у git-describe[1] для отримання детальної інформації.
- match=<pattern>
-
Розглядати лише теги, що відповідають заданому шаблону
glob
(7
), виключаючи префікс "refs/tags/"; див. відповідний параметр у git-describe[1] для отримання детальної інформації. - exclude=<pattern>
-
Не враховувати теги, що відповідають заданому шаблону
glob
(7
), за винятком префікса "refs/tags/"; див. відповідний параметр у git-describe[1] для отримання детальної інформації.
Окрім вищезазначеного, для об’єктів commit та tag, назви полів заголовка (tree
, parent
, object
, type
та tag
) можуть використовуватися для визначення значення в полі заголовка. Поля tree
та parent
також можуть використовуватися з модифікаторами :short
та :short=
<length>, як і objectname
.
Для об’єктів commit та tag спеціальні поля creatordate
та creator
відповідатимуть відповідній даті або кортежу name-email-date з полів committer
або tagger
залежно від типу об’єкта. Вони призначені для роботи з поєднанням анотованих та легких тегів.
Для об’єктів тегів значення fieldname
з префіксом у вигляді зірочки (*
) розширюється до значення fieldname
очищеного об’єкта, а не до значення самого об’єкта тегу.
Поля, значенням яких є кортеж name-email-date (author
, committer
та tagger
), можна доповнити суфіксами name
, email
та date
для вилучення іменованого компонента. Для полів електронної пошти (authoremail
, committeremail
та taggeremail
) можна додати :trim
, щоб отримати електронну пошту без кутових дужок, та :localpart
, щоб отримати частину перед символом @
з обрізаної електронної пошти. На додаток до цього, можна використовувати опцію :mailmap
та відповідні :mailmap,trim
та :mailmap,localpart
(порядок не має значення), щоб отримати значення імені та електронної пошти відповідно до файлу .mailmap або відповідно до файлу, встановленого у змінній конфігурації mailmap.file або mailmap.blob (див. gitmailmap[5]).
Необроблені дані в об’єкті є «сирими» (raw).
Зверніть увагу, що --format=%
(raw
) не можна використовувати з --python
, --shell
, --tcl
, оскільки такі мови можуть не підтримувати довільні двійкові дані у своєму типі змінних рядків.
Повідомлення в коміті або об’єкті тегу — це contents
, з якого contents:
<part> можна використовувати для вилучення різних частин:
- contents:size
-
Розмір повідомлення коміта або тегу в байтах.
- contents:subject
-
Перший абзац повідомлення, який зазвичай складається з одного рядка, береться як «тема» коміта або повідомлення тегу. Замість
contents:subject
, для отримання тих самих результатів можна використовувати полеsubject
.:sanitize
можна додати доsubject
для теми, що підходить для імені файлу. - contents:body
-
Решта коміту або повідомлення тегу, що йде після "subject".
- contents:signature
-
Додатковий GPG-підпис тегу.
- contents:lines=N
-
Перші
N
рядків повідомлення.
Крім того, трейлери, інтерпретовані git-interpret-trailers[1], отримуються як trailers
[:options
] (або за допомогою історичного псевдоніма contents:trailers
[:options
]). Для коректних значень [:option] див. розділ trailers
у git-log[1].
Для цілей сортування поля з числовими значеннями сортуються в числовому порядку (objectsize
, authordate
, committerdate
, creatordate
, taggerdate
). Усі інші поля використовуються для сортування в порядку їх байт-значення.
Також є опція сортування за версіями, це можна зробити за допомогою назви поля version:refname
або його псевдоніма v:refname
.
У будь-якому випадку, ім’я поля, яке посилається на поле, непридатне для об’єкта, на який посилається посилання, не викликає помилки. Натомість повертається порожній рядок.
Як окремий випадок для полів типу дати, ви можете вказати формат дати, додавши :
, а потім назву формату дати (див. значення, які приймає опція --date
для git-rev-list[1]). Якщо це форматування надається в ключі --sort
, посилання будуть відсортовані відповідно до байтового значення форматованого рядка, а не числового значення базової позначки часу.
Деякі атоми, такі як %(align) та %(if), завжди потребують відповідного %(end). Ми називаємо їх «відкриваючими атомами» та іноді позначаємо їх як %($open).
Коли діє специфічне для скриптової мови цитування, все між початковим атомом верхнього рівня та відповідним йому %(end) оцінюється відповідно до семантики початкового атома, і в лапки береться лише його результат з верхнього рівня.
ПРИКЛАДИ
Приклад безпосереднього створення форматованого тексту. Показати 3 останні позначені тегами коміти:
#!/bin/sh git for-each-ref --count=3 --sort='-*authordate' \ --format='From: %(*authorname) %(*authoremail) Subject: %(*subject) Date: %(*authordate) Ref: %(*refname) %(*body) ' 'refs/tags'
Простий приклад використання команди shell eval на виводі, демонструючи використання --shell. Перелічіть префікси всіх заголовків:
#!/bin/sh git for-each-ref --shell --format="ref=%(refname)" refs/heads | \ while read entry do eval "$entry" echo `dirname $ref` done
Трохи детальніший звіт про теги, який демонструє, що формат може бути цілим скриптом:
#!/bin/sh fmt=' r=%(refname) t=%(*objecttype) T=${r#refs/tags/} o=%(*objectname) n=%(*authorname) e=%(*authoremail) s=%(*subject) d=%(*authordate) b=%(*body) kind=Tag if test "z$t" = z then # could be a lightweight tag t=%(objecttype) kind="Lightweight tag" o=%(objectname) n=%(authorname) e=%(authoremail) s=%(subject) d=%(authordate) b=%(body) fi echo "$kind $T points at a $t object $o" if test "z$t" = zcommit then echo "The commit was authored by $n $e at $d, and titled $s Its message reads as: " echo "$b" | sed -e "s/^/ /" echo fi ' eval=`git for-each-ref --shell --format="$fmt" \ --sort='*objecttype' \ --sort=-taggerdate \ refs/tags` eval "$eval"
Приклад використання %(if)…%(then)…%(else)…%(end). Це позначає поточну гілку зірочкою.
git for-each-ref --format="%(if)%(HEAD)%(then)* %(else) %(end)%(refname:short)" refs/heads/
Приклад використання %(if)…%(then)…%(end). Виводить ім’я автора, якщо воно є.
git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"
ЗАСТЕРЕЖЕННЯ
Зверніть увагу, що розміри об’єктів на диску повідомляються точно, але слід бути обережним, роблячи висновки про те, які посилання або об’єкти відповідають за використання диска. Розмір упакованого недельта-об’єкта може бути набагато більшим за розмір об’єктів, які дельта-об’єкти відносно нього, але вибір того, який об’єкт є базовим, а який дельта-об’єктом, є довільним і може змінюватися під час перепаковки.
Також зауважте, що в базі даних об’єктів може бути кілька копій об’єкта; у цьому випадку не визначено, розмір або дельта-база якої копії буде відображатися.
НОТАТКИ
Під час поєднання кількох фільтрів --contains
та --no-contains
відображаються лише посилання, які містять принаймні один з комітів --contains
та не містять жодного з комітів --no-contains
.
Під час об’єднання кількох фільтрів --merged
та --no-merged
відображаються лише посилання, досяжні принаймні з одного з комітів --merged
та з жодного з комітів --no-merged
.
GIT
Частина набору git[1]