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.53.0
2026-02-02
-
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.2 → 2.49.1 no changes
-
2.47.1
2024-11-25
- 2.44.1 → 2.47.0 no changes
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.7 no changes
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.41.1 → 2.42.4 no changes
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 no changes
-
2.40.0
2023-03-12
- 2.39.4 → 2.39.5 no changes
-
2.39.3
2023-04-17
- 2.38.1 → 2.39.2 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.30.1 → 2.33.8 no changes
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.27.1 → 2.28.1 no changes
-
2.27.0
2020-06-01
- 2.25.1 → 2.26.3 no changes
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 no changes
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.19.3 → 2.20.5 no changes
-
2.19.2
2018-11-21
- 2.19.1 no changes
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 no changes
-
2.16.6
2019-12-06
- 2.15.4 no changes
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
- 2.11.4 → 2.12.5 no changes
-
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 no changes
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
- 2.1.4 → 2.3.10 no changes
-
2.0.5
2014-12-17
СИНОПСИС
gitcheckout[-q] [-f] [-m] [<branch>]gitcheckout[-q] [-f] [-m]--detach[<branch>]gitcheckout[-q] [-f] [-m] [--detach] <commit>gitcheckout[-q] [-f] [-m] [[-b|-B|--orphan] <new-branch>] [<start-point>]gitcheckout<tree-ish> [--] <pathspec>…gitcheckout<tree-ish>--pathspec-from-file=<file> [--pathspec-file-nul]gitcheckout[-f|--ours|--theirs|-m|--conflict=<style>] [--] <pathspec>…gitcheckout[-f|--ours|--theirs|-m|--conflict=<style>]--pathspec-from-file=<file> [--pathspec-file-nul]gitcheckout(-p|--patch) [<tree-ish>] [--] [<pathspec>…]
ОПИС
git checkout має два основні режими:
-
Перемикання гілок, з
gitcheckout<branch> -
Відновлення версії файлу, наприклад, за допомогою git checkout <commit> <імʼя файлу> або git checkout <імʼя файлу>
Дивіться РОЗУМІННЯ НЕОДНОЗНАЧНОСТЕЙ АРГУМЕНТІВ нижче, щоб дізнатися, як Git вирішує, який з них використовувати.
-
gitcheckout[<branch>] -
Перейти до <branch>. Встановлює поточну гілку як <branch> та оновлює файли у вашій робочій теці. Оновлення не відбудеться, якщо у файлах, де вміст гілки <branch> відрізняється від вмісту вашого поточного коміту, є незбережені зміни. В іншому випадку незбережені зміни будуть збережені.
Якщо <branch> не знайдено, але існує гілка відстеження рівно в одному віддаленому об’єкті (назвемо його <remote>) з відповідним імʼям, і
--no-guessне вказано, розглядати як еквівалент$ git checkout -b <branch> --track <remote>/<branch>
Виконання команди
gitcheckoutбез зазначення гілки не має жодного ефекту, окрім виведення інформації про відстеження поточної гілки. -
gitcheckout-b<new-branch> [<start-point>] -
Створює нову гілку з назвою <new-branch>, починає її з <start-point> (стандартно поточний коміт) та перемикається на нову гілку. Ви можете використовувати опції
--trackабо--no-track, щоб встановити інформацію для відстеження основної гілки.Це не вдасться, якщо виникне помилка під час перемикання на <new-branch>, наприклад, якщо перемикання на коміт <start-point> перезапише ваші незафіксовані зміни.
-
gitcheckout-B<branch> [<start-point>] -
Те саме, що й
-b, за винятком того, що якщо гілка вже існує, то <branch> скидається до початкової точки, а не призводить до невдачі. -
gitcheckout--detach[<branch>] -
gitcheckout[--detach] <commit> -
Те саме, що й
gitcheckout<branch>, за винятком того, що замість вказівкиHEADна гілку, він вказуєHEADна ID коміта. Дивіться розділ "DETACHED HEAD" нижче для отримання додаткової інформації.Пропуск <branch> відʼєднує
HEADна вершині поточної гілки. -
gitcheckout<tree-ish> [--] <pathspec>... -
gitcheckout<tree-ish>--pathspec-from-file=<file> [--pathspec-file-nul] -
Замінити вказані файли та/або теки версією з вказаного коміту або дерева та додати їх до індексу (також відомого як "staging area").
Наприклад,
gitcheckoutmainfile.txtзамінитьfile.txtверсією зmain. -
gitcheckout[-f|--ours|--theirs|-m|--conflict=<style>] [--] <pathspec>... -
gitcheckout[-f|--ours|--theirs|-m|--conflict=<style>]--pathspec-from-file=<file> [--pathspec-file-nul] -
Замінює вказані файли та/або теки версією з індексу.
Наприклад, якщо ви виконуєте перевірку коміту, редагуєте файл
file.txt, а потім вирішуєте, що ці зміни були помилкою, командаgitcheckoutfile.txtвідкине всі зміни у файліfile.txt, які не були додані до stage.Ця операція завершиться з помилкою, якщо у файлі є конфлікт злиття, а ви ще не виконали команду
gitaddfile.txt(або еквівалентну їй) для позначення його як виправленого. Ви можете використати опцію-f, щоб проігнорувати файли, що не злилися, замість того, щоб отримувати помилку; використати--oursабо--theirs, щоб замінити їх версією з певної сторони злиття; або використати-m, щоб замінити їх оригінальним результатом злиття з конфліктом. -
gitcheckout(-p|--patch) [<tree-ish>] [--] [<pathspec>...] -
Це схоже на два попередні режими, але дозволяє використовувати інтерактивний інтерфейс для показу виводу "diff" та вибору фрагментів для використання в результаті. Дивіться нижче опис опції
--patch.
ОПЦІЇ
-
-q -
--quiet -
Тихий режим, повідомлення відгуку придушуються.
-
--progress -
--no-progress -
Повідомлення про стан виконання зазвичай зʼявляються у стандартному потоці помилок, коли він підключений до термінала, якщо не вказано
--quiet. Цей прапорець дозволяє повідомляти про хід виконання, навіть якщо він не підключений до термінала, незалежно від--quiet. -
-f -
--force -
Під час переходу на іншу гілку дія продовжується, навіть якщо індекс або робоче дерево відрізняються від
HEAD, а також якщо в процесі є файли, що не відстежуються. Використовується для видалення локальних змін та будь-яких файлів або тек, що не відстежуються, які заважають цьому процесу.Під час перемикання шляхів з індексу не допускайте помилки на необʼєднаних елементах; натомість необʼєднані елементи ігноруються.
-
--ours -
--theirs -
Під час перемикання шляхів з індексу перемикатись на stage #2 (
ours) або stage #3 (theirs) для необʼєднаних шляхів.Зверніть увагу, що під час виконання команд
gitrebaseтаgitpull--rebase,oursтаtheirsможуть помінятися місцями;--oursвказує версію з гілки, на яку перебазуються зміни, тоді як--theirsвказує версію з гілки, яка містить вашу роботу, що перебазується.Це пояснюється тим, що
rebaseвикористовується в робочому процесі, який розглядає історію на віддаленій гілці як спільну канонічну, а роботу, виконану на гілці, яку ви перебазуєте, розглядає як роботу третьої сторони, що інтегрується, і ви тимчасово берете на себе роль зберігача канонічної історії під час перебазування. Як зберігачу канонічної історії, вам потрібно переглядати історію з віддаленої гілки якours(тобто "нашу спільну канонічну історію"), тоді як те, що ви зробили на своїй бічній гілці, якtheirs(тобто "роботу одного учасника поверх неї"). -
-b<new-branch> -
Створення нової гілки з назвою <нова-гілка>, яка починається з <початкової-точки> та перехід на отриману гілку; див. git-branch[1] для отримання детальної інформації.
-
-B<new-branch> -
Те саме, що й
-b, за винятком того, що якщо гілка вже існує, то <branch> скидається до початкової точки, а не призводить до невдачі. -
-t -
--track[=(direct|inherit)] -
Під час створення нової гілки встановлює конфігурацію "upstream". Див.
--trackу git-branch[1] для отримання детальної інформації. Для зручності, --track без -b означає створення гілки.Якщо не вказано параметр
-b, імʼя нової гілки буде отримано з гілки віддаленого відстеження, шляхом перегляду локальної частини refspec, налаштованої для відповідного віддаленого елемента, а потім видалення початкової частини до "*". Це підкаже нам використовуватиhackяк локальну гілку під час відгалуження відorigin/hack(абоremotes/origin/hack, або навітьrefs/remotes/origin/hack). Якщо задана назва не має косої риски, або вищевказане вгадування призводить до порожньої назви, вгадування переривається. У такому випадку ви можете явно вказати назву за допомогою-b. -
--no-track -
Не встановлювати конфігурацію "upstream", навіть якщо змінна конфігурації
branch.autoSetupMergeмає значення true. -
--guess -
--no-guess -
Якщо <branch> не знайдено, але існує гілка відстеження саме в одному віддаленому репозиторії (назвемо його <remote>) з відповідною назвою, розглядайте це як еквівалент
$ git checkout -b <branch> --track <remote>/<branch>
Якщо гілка існує на декількох віддалених репозиторіях і один із них вказано у конфігураційній змінній
checkout.defaultRemote, ми будемо використовувати саме його для усунення неоднозначності, навіть якщо <branch> не є унікальним для всіх віддалених репозиторіїв. Встановіть, наприклад,checkout.defaultRemote=origin, щоб завжди перевіряти віддалені гілки звідти, якщо <branch> є неоднозначним, але існує на віддаленому сервері origin . Див. такожcheckout.defaultRemoteу git-config[1].--guess— є стандартною поведінкою. Використовуйте--no-guess, щоб її вимкнути.Стандартну поведінку можна встановити за допомогою змінної конфігурації
checkout.guess. -
-l -
Створіть reflog нової гілки; див. git-branch[1] для отримання детальної інформації.
-
-d -
--detach -
Замість того, щоб перемикатись на гілку для роботи з нею, перейти до коміту для перевірки та експериментів, які можна видалити. Це стандартна поведінка для
gitcheckout<commit>, коли <commit> не є назвою гілки. Дивіться розділ "DETACHED HEAD" нижче для отримання детальної інформації. -
--orphan<new-branch> -
Створити нову ненароджену гілку з назвою <нова-гілка>, розпочату з <початкова-точка>, та перейти до неї. Перший коміт, зроблений у цій новій гілці, не матиме батьківських елементів і буде коренем нової історії, повністю відокремленої від усіх інших гілок та комітів.
Індекс та робоче дерево налаштовуються так, ніби ви попередньо виконали команду
gitcheckout<початкова-точка>. Це дозволяє вам розпочати нову історію, яка записує набір шляхів, подібних до <початкової-точки>, простим виконанням командиgitcommit-aдля створення кореневого коміту.Це може бути корисним, коли ви хочете опублікувати дерево з коміту, не розкриваючи його повну історію. Ви можете зробити це, щоб опублікувати гілку з відкритим кодом проєкту, поточне дерево якого є "чистим", але повна історія якого містить власницькі або іншим чином обтяжені фрагменти коду.
Якщо ви хочете розпочати відʼєднану історію, яка записує набір шляхів, повністю відмінний від шляху <початкової-точки>, тоді вам слід очистити індекс та робоче дерево одразу після створення гілки-сироти, виконавши команду
gitrm-rf.з верхнього рівня робочого дерева. Після цього ви будете готові створювати нові файли, повторно заповнювати робоче дерево, скопіювати їх з іншого місця, розпакувати tar-архів тощо. -
--ignore-skip-worktree-bits -
У режимі вибіркового перемикання
gitcheckout--<шлях>... оновлюватиме лише записи, що відповідають <шляхам> та вибірковим шаблонам у$GIT_DIR/info/sparse-checkout. Цей параметр ігнорує вибіркові шаблони та додає назад будь-які файли в <шлях>.... -
-m -
--merge -
Під час перемикання гілок, якщо у вас є локальні зміни до одного або кількох файлів, які відрізняються між поточною гілкою та гілкою, на яку ви перемикаєтеся, команда відмовляється перемикати гілки, щоб зберегти ваші зміни в контексті. Однак, за допомогою цієї опції тристороннє злиття між поточною гілкою, вмістом вашого робочого дерева та новою гілкою виконується, і ви опинитеся на новій гілці.
У разі виникнення конфлікту злиття записи індексу для шляхів, що конфліктують, залишаються незлиті, і вам потрібно розвʼязати ці конфлікти та позначити розвʼязані шляхи командою
gitadd(абоgitrm, якщо в результаті злиття шлях має бути видалено).Під час перевірки шляхів з індексу ця опція дозволяє відтворити конфліктне злиття у вказаних шляхах. Цю опцію не можна використовувати під час перевірки шляхів з деревоподібної структури.
Під час перемикання гілок за допомогою
--merge, зміни в stage можуть бути втрачені. -
--conflict=<стиль> -
Те саме, що й опція
--mergeвище, але змінює спосіб представлення фрагментів з конфліктами, перевизначаючи змінну конфігураціїmerge.conflictStyle. Можливі значення:merge(стандартно),diff3таzdiff3. -
-p -
--patch -
Інтерактивно обирайте фрагменти у різниці між <tree-ish> (або індексом, якщо не вказано) та робочим деревом. Потім обрані фрагменти застосовуються у зворотному порядку до робочого дерева (а якщо вказано <tree-ish>, то й до індексу).
Це означає, що ви можете використовувати
gitcheckout-pдля вибіркового відкидання редагувань з вашого поточного робочого дерева. Дивіться розділ "Інтерактивний режим" у git-add[1], щоб дізнатися, як керувати режимом--patch.Зверніть увагу, що цей параметр стандартно використовує режим без накладання (див. також
--overlay) і наразі не підтримує режим накладання. -
-U<n> -
--unified=<n> -
Створює файли відмінностей (diff) з <n> рядками контексту. Стандартно використовується
diff.contextабо 3, якщо параметр конфігурації не встановлено. -
--inter-hunk-context=<n> -
Показує контекст між фрагментами відмінностей (diff hunks), до вказаної <кількості> рядків, таким чином обʼєднуючи фрагменти, що знаходяться близько один до одного. Стандартно використовується значення
diff.interHunkContextабо 0, якщо параметр конфігурації не встановлено.
-
--ignore-other-worktrees -
gitcheckoutвідмовляє, коли ви вже знаходитесь в потрібній гілці або вона використовується іншим робочим деревом. Ця опція змушує гілку все одно перемикатись. Іншими словами, гілка може використовуватися кількома робочими деревами. -
--overwrite-ignore -
--no-overwrite-ignore -
Мовчки перезаписувати ігноровані файли під час перемикання гілок. Є стандартною поведінкою. Використовуйте
--no-overwrite-ignore, щоб перервати операцію, коли нова гілка містить ігноровані файли. -
--recurse-submodules -
--no-recurse-submodules -
Використання
--recurse-submodulesоновить вміст усіх активних субмодулів відповідно до коміту, записаного в суперпроєкті. Якщо локальні зміни в субмодулі будуть перезаписані, перемикання завершиться невдачею, якщо не використано-f. Якщо нічого не використано (або--no-recurse-submodules), робочі дерева субмодулів не будуть оновлені. Так само, як і git-submodule[1], це відʼєднаєHEADсубмодуля. -
--overlay -
--no-overlay -
У стандартному режимі накладання,
gitcheckoutніколи не видаляє файли з індексу або робочого дерева. При вказівці--no-overlay, файли, які зʼявляються в індексі та робочому дереві, але не в <tree-ish>, видаляються, щоб вони точно відповідали <tree-ish>. -
--pathspec-from-file=<файл> -
Специфікатор шляху передається у <файл> замість аргументів командного рядка. Якщо <файл> дорівнює
-, то використовується стандартний ввід. Елементи специфікатора шляху розділяються символами LF або CR/LF. Елементи специфікатора шляху можна брати в лапки, як це пояснено для змінної конфігураціїcore.quotePath(див. git-config[1]). Див. також--pathspec-file-nulта глобальну змінну--literal-pathspecs. -
--pathspec-file-nul -
Має сенс лише з
--pathspec-from-file. Елементи Pathspec розділяються символом NUL, а всі інші символи (включно з символами нового рядка та лапками) сприймаються буквально. - <branch>
-
Гілка для перемикання; якщо вона посилається на гілку (тобто ім’я, яке, доповнене "refs/heads/", є коректним посиланням), то ця гілка вилучена. В іншому випадку, якщо вона посилається на коректний коміт, ваш
HEADстає "відокремленим", і ви більше не перебуваєте на жодній гілці (див. деталі нижче).Ви можете використовувати синтаксис
@{-N}для посилання на N-у останню гілку/коміт, на яку перемикаються за допомогою операції "git checkout". Ви також можете вказати-, що є синонімом@{-1}.У особливому випадку можна використовувати <rev-a>
...<rev-b> як скорочений запис для бази злиття <rev-a> та <rev-b>, якщо така база існує лише одна. Можна опустити не більше одного з елементів <rev-a> та <rev-b>; у цьому випадку буде використано значенняHEAD. - <нова-гілка>
-
Назва для нової гілки.
- <start-point>
-
Імʼя коміту, з якого починається нова гілка; див. git-branch[1] для отримання детальної інформації. Стандартно —
HEAD.У особливому випадку можна використовувати <rev-a>
...<rev-b> як скорочений запис для бази злиття <rev-a> та <rev-b>, якщо така база існує лише одна. Можна опустити не більше одного з елементів <rev-a> та <rev-b>; у цьому випадку буде використано значенняHEAD. - <tree-ish>
-
Дерево для отримання (якщо шляхи вказані). Якщо не вказано, буде використано індекс.
У особливому випадку можна використовувати <rev-a>
...<rev-b> як скорочений запис для бази злиття <rev-a> та <rev-b>, якщо така база існує лише одна. Можна опустити не більше одного з елементів <rev-a> та <rev-b>; у цьому випадку буде використано значенняHEAD. -
-- -
Не інтерпретує жодних додаткових аргументів як опції.
- <pathspec>...
-
Обмежує шляхи, на які впливає операція.
Для отримання додаткової інформації див. елемент «pathspec» у gitglossary[7].
DETACHED HEAD
HEAD зазвичай посилається на іменовану гілку (наприклад, master). Тим часом кожна гілка посилається на певний коміт. Розгляньмо репозиторій з трьома комітами, один з яких позначений тегом, та з гілкою master, яка є поточною:
HEAD (посилається на гілку «master»')
|
v
a---b---c гілка 'master' (посилається на коміт 'c'))
^
|
tag 'v2.0' (посилається на коміт 'b')
Коли коміт створюється в цьому стані, гілка оновлюється, щоб посилатися на новий коміт. Зокрема, git commit створює новий коміт d, батьківським комітом якого є commit c, а потім оновлює гілку master, щоб посилатися на новий коміт d. HEAD все ще посилається на гілку master і тому опосередковано тепер посилається на коміт d:
$ edit; git add; git commit
HEAD (посилається на гілку «master»')
|
v
a---b---c---d гілка 'master' (стосується комміту 'd')
^
|
tag 'v2.0' (посилається на коміт 'b')
Іноді корисно мати можливість отримати коміт, який не знаходиться на верхівці жодної іменованої гілки, або навіть створити новий коміт, на який не посилається іменована гілка. Розгляньмо, що відбувається, коли ми перемикаємось на коміт b (тут ми показуємо два способи, як це можна зробити):
$ git checkout v2.0 # або
$ git checkout master^^
HEAD (посилається на коміт 'b')
|
v
a---b---c---d гілка 'master' (стосується комміту 'd')
^
|
tag 'v2.0' (посилається на коміт 'b')
Зверніть увагу, що незалежно від того, яку команду перемикання ми використовуємо, HEAD тепер безпосередньо посилається на коміт b. Це відомо як перебування HEAD у відокремленому стані. Це просто означає, що HEAD посилається на конкретний коміт, на відміну від посилання на іменовану гілку. Подивимося, що відбувається, коли ми створюємо коміт:
$ edit; git add; git commit
HEAD (посилається на commit 'e')
|
v
e
/
a---b---c---d гілка 'master' (посилається на коміт 'd')
^
|
tag 'v2.0' (посилається на коміт 'b')
Тепер є новий коміт e, але на нього посилається лише HEAD. Звичайно, ми можемо додати ще один коміт у цьому стані:
$ edit; git add; git commit
HEAD (посилається на коміт 'f')
|
v
e---f
/
a---b---c---d гілка 'master' (посилається на коміт 'd')
^
|
tag 'v2.0' (посилається на коміт 'b')
Фактично, ми можемо виконувати всі звичайні операції Git. Але подивимось, що відбувається, коли ми потім отримуємо master:
$ git checkout master
HEAD (стосується гілки «головна»)
e---f |
/ v
a---b---c---d гілка 'master' (стосується комміту 'd')
^
|
tag 'v2.0' (посилається на коміт 'b')
Важливо розуміти, що на цьому етапі нічого не посилається на коміт f. Зрештою, коміт f (і, відповідно, коміт e) буде видалено стандартним процесом збирання сміття Git, якщо ми не створимо посилання до цього. Якщо ми ще не відійшли від коміту f, будь-який з цих елементів створить посилання на нього:
$ git checkout -b foo # or "git switch -c foo" (1) $ git branch foo (2) $ git tag foo (3)
-
створює нову гілку
foo, яка посилається на комітf, а потім оновлюєHEAD, щоб він посилався на гілкуfoo. Іншими словами, після цієї команди ми більше не будемо у відокремленомуHEAD. -
аналогічно створює нову гілку
foo, яка посилається на комітf, але залишаєHEADу відокремленому стані. -
створює новий тег
foo, який посилається на комітf, залишаючиHEADвідокремленим.
Якщо ми відійшли від коміту f, то спочатку потрібно відновити назву його обʼєкта (зазвичай за допомогою git reflog), а потім створити посилання на нього. Наприклад, щоб побачити два останні коміти, на які посилався HEAD, можна скористатися будь-якою з цих команд:
$ git reflog -2 HEAD # або $ git log -g -2 HEAD
УСУНЕННЯ НЕОДНОЗНАЧНОСТЕЙ АРГУМЕНТУ
Коли ви запускаєте git checkout <щось>, Git намагається вгадати, чи <щось> має бути гілкою, комітом чи набором файлів, а потім або перемикається на цю гілку чи коміт, або відновлює вказані файли.
Якщо виникне будь-яка неоднозначність, Git трактуватиме <щось> як гілку або коміт, але ви можете використовувати подвійний дефіс --, щоб змусити Git трактувати параметр як список файлів та/або тек, ось так:
git checkout -- file.txt
ПРИКЛАДИ
1. Шляхи
Наступна послідовність перевіряє гілку master, повертає Makefile на дві ревізії назад, помилково видаляє hello.c та повертає його з індексу.
$ git checkout master (1) $ git checkout master~2 Makefile (2) $ rm -f hello.c $ git checkout hello.c (3)
-
перемкнутись на гілку
-
взяти файл з іншого коміту
-
відновити
hello.cз індексу
Якщо ви хочете отримати всі вихідні файли C з індексу, ви можете сказати
$ git checkout -- '*.c'
Зверніть увагу на лапки навколо *.c. Файл hello.c також буде отримано, навіть якщо він більше не знаходиться в робочому дереві, оскільки шаблонізація файлів використовується для зіставлення записів в індексі (а не в робочому дереві оболонкою).
Якщо у вас є невдала гілка з назвою hello.c, цей крок буде сплутано з інструкцією для переходу до цієї гілки. Натомість вам слід написати:
$ git checkout -- hello.c
2. Обʼєднання
Після роботи в неправильній гілці, перемикання на правильну гілку буде здійснюватися за допомогою:
$ git checkout mytopic
Однак, ваша "неправильна" гілка та правильна гілка mytopic можуть відрізнятися у файлах, які ви змінили локально, і в такому разі вищезгадане перемикання завершиться невдачею ось так:
$ git checkout mytopic помилка: Ви внесли локальні зміни до 'frotz'; гілки не перемикаються.
Ви можете надати команді прапорець -m, що спробує виконати тристороннє злиття:
$ git checkout -m mytopic Автоматичне обʼєднання frotz
Після цього тристороннього злиття локальні зміни не реєструються у вашому індексному файлі, тому git diff покаже вам, які зміни ви внесли з моменту створення нової гілки.
3. Конфлікт обʼєднання
Коли під час перемикання гілок з опцією -m виникає конфлікт злиття, ви побачите щось подібне:
$ git checkout -m mytopic Автоматичне обʼєднання frotz ПОМИЛКА: Конфлікт обʼєднання у frotz фатальна помилка: програма обʼєднання зазнала збою.
На цьому етапі команда git diff показує зміни, які були успішно об’єднані, як у попередньому прикладі, а також зміни у файлах, де виник конфлікт. Відредагуйте та розв’яжіть конфлікт, а потім, як зазвичай, позначте його як вирішений за допомогою команди git add:
$ edit frotz $ git add frotz
КОНФІГУРАЦІЯ
Все, що знаходиться нижче цього рядка в цьому розділі, вибірково включено з документації git-config[1]. Вміст такий самий, як і там:
-
checkout.defaultRemote -
Коли ви виконуєте команду
gitcheckout<щось> абоgitswitch<щось> і маєте лише один віддалений репозиторій, система може неявним чином вибрати та відстежувати, наприклад,origin/<щось>. Це перестає працювати, щойно у вас з’являється більше одного віддаленого репозиторію з посиланням <щось>. Цей параметр дозволяє вказати ім’я пріоритетного віддаленого репозиторію, якому завжди слід надавати перевагу при усуненні неоднозначності. Типовим випадком використання є встановлення цього параметра наorigin.Наразі це використовується в git-switch[1] та git-checkout[1], коли команди
gitcheckout<щось> абоgitswitch<щось> виконують перехід до гілки <щось> на іншому віддаленому сервері, а також у git-worktree[1], коли командаgitworktreeaddпосилається на віддалену гілку. У майбутньому це налаштування може використовуватися для інших команд або функцій, подібних до checkout. -
checkout.guess -
Задає стандартне значення для опції
--guessабо--no-guessу командахgitcheckoutтаgitswitch. Див. git-switch[1] та git-checkout[1]. -
checkout.workers -
Кількість паралельних процесів, які використовуються під час оновлення робочого дерева. Стандартне значення — один, тобто послідовне виконання. Якщо встановити значення менше одиниці, Git використовуватиме стільки процесів, скільки буде доступних логічних ядер. Цей параметр та
checkout.thresholdForParallelismвпливають на всі команди, що виконують checkout. Наприклад: checkout, clone, reset, sparse-checkout тощо.NoteПаралельне перевіряння зазвичай забезпечує кращу продуктивність для репозиторіїв, розташованих на SSD-накопичувачах або через NFS. Для репозиторіїв на механічних дисках та/або машинах з невеликою кількістю ядер стандартне послідовне перевіряння часто працює ефективніше. Розмір та рівень стиснення репозиторію також можуть впливати на ефективність роботи паралельної версії. -
checkout.thresholdForParallelism -
Під час паралельного перевіряння невеликої кількості файлів витрати на запуск субпроцесів та міжпроцесну взаємодію можуть перевищити виграш від паралелізації. Цей параметр дозволяє визначити мінімальну кількість файлів, при якій слід спробувати виконати паралельне перевіряння. Стандартне значення — 100.
GIT
Частина набору git[1]