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.52.0
2025-11-17
- 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.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>...
-
Якщо задано один або декілька параметрів <pattern>, відображаються лише посилання, які відповідають принаймні одному шаблону, або за допомогою
fnmatch(3), або буквально, в останньому випадку повністю або від початку до косої риски. -
--stdin -
Список шаблонів зчитується зі стандартного вводу, а не зі списку аргументів.
-
--count=<count> -
Зупинити після відображення <кількість> посилань.
-
--sort=<ключ> -
Сортувати за назвою поля <ключ>. Додайте префікс
-для сортування у порядку спадання значення. Якщо не вказано, використовуєтьсяrefname. Ви можете використовувати опцію--sort=<ключ> кілька разів, і в цьому випадку останній ключ стає первинним ключем. -
--format[=<format>] -
Рядок, який інтерполює %(ім'я поля) з посилання, що відображається, та об’єкта, на який воно вказує. Крім того, рядковий літерал
%%відображатиметься як%, а%xx, деxx– шістнадцяткові цифри, відображатиметься як символ із шістнадцятковим кодомxx. Наприклад,%00інтерполює до \0 (NUL),%09до \t (TAB), а%0aдо \n (LF).
Якщо не вказано, <формат> за замовчуванням має значення %(назваоб'єкта) SPC %(типоб'єкта) TAB %(назвапосилання).
-
--color[=<when>] -
Враховуйте будь-які кольори, зазначені в опції
--format. Поле <when_ має бути одним із значеньalways,neverабоauto(якщо <when> відсутнє, поводьтеся так, нібиalwaysбуло вказано). -
--shell -
--perl -
--python -
--tcl -
Якщо задано, рядки, що замінюють заповнювачі
%(fieldname), позначені як рядкові літерали, що підходять для вказаної мови хоста. Це призначено для створення скриптлета, який можна безпосередньо "оцінити". -
--points-at=<object> -
Перераховувати лише посилання, які вказують на заданий об’єкт.
-
--merged[=<object>] -
Перелічувати лише посилання, поради яких доступні з вказаного коміту (
HEAD, якщо не вказано). -
--no-merged[=<object>] -
Перелічувати лише посилання, підказки яких недоступні з <object>(
HEAD, якщо не вказано). -
--contains[=<object>] -
Перераховувати лише посилання, що містять <object>(
HEAD, якщо не вказано). -
--no-contains[=<object>] -
Перераховувати лише посилання, які не містять <об’єкт> (
HEAD, якщо не вказано). -
--ignore-case -
Сортування та фільтрація посилань не враховують регістр.
-
--omit-empty -
Не друкуйте новий рядок після відформатованих посилань, де формат розгортається до порожнього рядка.
-
--exclude=<excluded-pattern> -
Якщо задано один або декілька параметрів
--exclude, відображаються лише ті посилання, які не відповідають жодному з параметрів <excluded-pattern>. Зіставлення виконується за тими ж правилами, що й для <pattern> вище. -
--include-root-refs -
Перелічіть кореневі посилання (
HEADта псевдопосилання) окремо від звичайних посилань. -
--start-after=<marker> -
Дозволяє розбивати вивід на сторінки, пропускаючи посилання до зазначеного маркера включно. Під час розбиття на сторінки слід зазначити, що посилання можна видаляти, змінювати або додавати між викликами. Вивід поверне лише ті посилання, які лексикографічно слідують за маркером. Вивід починається з першого посилання, яке йде після маркера в алфавітному порядку. Не можна використовувати з опціями
--sort=<ключ> або--stdin, або з аргументом(ами) <шаблон> для обмеження посилань.
НАЗВИ ПОЛІВ
Різні значення зі структурованих полів у об’єктах, на які посилаються, можна використовувати для інтерполяції в результуючий вивід або як ключі сортування.
Для всіх об’єктів можна використовувати такі назви:
-
refname -
Назва посилання (частина після
$GIT_DIR/). Для неоднозначної короткої назви посилання додайте:short. Опціяcore.warnAmbiguousRefsвикористовується для вибору режиму суворого скорочення. Якщо доданоlstrip=<n> (rstrip=<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. -
objecttype -
Тип об’єкта (
blob,tree,commit,tag). -
objectsize -
Розмір об’єкта (те саме, що й у звітах git cat-file -s). Додайте
:disk, щоб отримати розмір у байтах, який об’єкт займає на диску. Дивіться примітку щодо розмірів на диску в розділі ЗАСТЕРЕЖЕННЯ нижче. -
objectname -
Ім’я об’єкта (також відоме як SHA-1). Для неоднозначного скорочення назви об’єкта додайте
:short. Для скорочення назви об’єкта з бажаною довжиною додайте:short=<довжина>, де мінімальна довжина дорівнюєMINIMUM_ABBREV. Довжину можна перевищити, щоб забезпечити унікальність назв об’єктів. -
deltabase -
Це розширюється до назви об’єкта дельта-бази для заданого об’єкта, якщо вона збережена як дельта. В іншому випадку, воно розширюється до нульової назви об’єкта (всі нулі).
-
upstream -
Назва локального посилання, яке можна вважати «вище за течією» відносно відображеного посилання. Враховує
: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 -
Вирівнювання вмісту між
%(align:...) та%(end) по лівому, середньому або правому краю. Після "align:" йдутьwidth=<width> таposition=<position> у будь-якому порядку, розділені комою, де <position> є абоleft,right, абоmiddle, за замовчуваннямleft, а <width> – це загальна довжина вмісту з вирівнюванням. Для стислості префікси "width=" та/або "position=" можна пропустити, а замість них використовувати лише <width> та <position>. Наприклад,%(align:<width>,<position>). Якщо довжина вмісту більша за ширину, вирівнювання не виконується. Якщо використовується з--quote, все між%(align:...) та%(end) береться в лапки, але якщо вкладено, то лапки виконується лише на найвищому рівні. -
if -
Використовується як
%(if)...%(then)...%(end) або%(if)...%(then)...%(else)...%(end). Якщо після%(if) є атом зі значенням або рядковим літералом, то друкується все після%(then), інакше, якщо використовується атом%(else), то друкується все після %(else). Ми ігноруємо пробіли під час обчислення рядка перед%(then), це корисно, коли ми використовуємо атом%(HEAD), який друкує "*" або " ", і ми хочемо застосувати умову if лише до посиланняHEAD. Додайте ":equals=<string>" або ":notequals=<string>", щоб порівняти значення між атомами%(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. -
worktreepath -
Абсолютний шлях до робочого дерева, в якому витягнуто посилання, якщо воно витягнуто в будь-якому зв’язаному робочому дереві. В іншому випадку порожній рядок.
-
ahead-behind:<commit-ish> -
Два цілі числа, розділені пробілом, що показують кількість комітів попереду та позаду відповідно, при порівнянні вихідного посилання з <committish>, зазначеним у форматі.
-
is-base:<commit-ish> -
Щонайбільше в одному рядку з’явиться (<commit-ish>), щоб вказати посилання, яке, найімовірніше, є тим посиланням, що використовувалося як відправна точка для гілки, що створила <commit-ish>. Цей вибір робиться за допомогою евристики: оберіть посилання, яке мінімізує кількість комітів в історії першого батьківського елемента <commit-ish>, а не в історії першого батьківського елемента посилання.
Наприклад, розглянемо наступний малюнок історій перших батьків для кількох посилань:
*--*--*--*--*--* 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, а зв’язки розриваються найдавнішим посиланням у відсортованому порядку.Зверніть увагу, що цей токен не з’явиться, якщо історія першого батьківського елемента <commit-ish> не перетинається з історіями першого батьківського елемента відфільтрованих посилань.
-
describe[:<option>,...] -
Зрозуміле для людини ім’я, наприклад 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[:<опція>,...] (або за допомогою історичного псевдоніма contents:trailers[:<опція>,...]). Для коректних значень <опція> див. розділ 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]