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 no changes
-
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
СИНОПСИС
gitfor-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> за замовчуванням має значення
%(nameofobject)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:boldred). - вирівняти
-
Вирівнювання вмісту між %(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]