Терминал и как спрашивать у Git: выживание в командной строке

Рейтинг: 60.1% · 14 голосов
Самый подробный курс по Git - от первого коммита до объектной базы и packfiles. Терминал и первый репозиторий, ветки и слияние, конфликты, удалённая работа и форджи (GitHub, GitLab), rebase и переписывание истории, спасение кода через reflog и fsck, stash и worktree, bisect и blame, подмодули и монорепо, хуки и подпись коммитов, внутреннее устройство и масштаб. Для новичков и профи. Актуально на 2026 (Git 2.54, дорожная карта 3.0).
Ответить
Аватара пользователя
Pavel_Git
Сообщения: 52
Зарегистрирован: 11 май 2026, 05:31

Терминал и как спрашивать у Git: выживание в командной строке

Сообщение Pavel_Git »

Оглавление курса (52)
  1. Что такое контроль версий и почему победил Git
  2. Установка Git на Windows, macOS и Linux и первая настройка
  3. Терминал и как спрашивать у Git: выживание в командной строке (вы здесь)
  4. Ментальная модель Git: три состояния, коммит-снимок и граф
  5. Первый репозиторий: init, add, commit, status
  6. Просмотр изменений: status, diff и индексация по частям
  7. История проекта: git log, диапазоны и поиск
  8. .gitignore: что не должно попасть в репозиторий
  9. .gitattributes: окончания строк, бинарники и атрибуты
  10. Ветки как указатели: branch, switch и detached HEAD
  11. Слияние веток: fast-forward против трёхстороннего merge
  12. Конфликты слияния: анатомия и уверенное разрешение
  13. Практикум: твой первый день с Git от нуля до push
  14. Удалённые репозитории: remote, fetch, базовый pull и refspec
  15. git push: безопасная отправка и защита от перезаписи
  16. Клонирование: shallow, partial clone, bundle и backfill
  17. GitHub, GitLab и форки: pull request, rulesets и защита веток
  18. Рабочие процессы команды: GitFlow, GitHub Flow, trunk-based
  19. Merge queue и merge trains: безопасное вливание в trunk
  20. Культура code review и Conventional Commits
  21. git reset: три дерева и отмена индексации и коммитов
  22. git revert: безопасная отмена в общей истории
  23. Правка последнего коммита: git commit --amend
  24. git rebase: пересадка истории и золотое правило
  25. Интерактивный rebase: переписать серию коммитов
  26. git cherry-pick: перенос отдельных коммитов
  27. Stacked diffs: цепочка зависимых PR
  28. Массовое переписывание истории: git filter-repo и git replace
  29. git reflog: журнал, который помнит всё
  30. Восстановление утерянных коммитов, веток и файлов
  31. Откат опасных операций: reset --hard, сломанный rebase, плохой merge
  32. git stash: тайник для незавершённой работы
  33. git worktree: несколько рабочих деревьев одного репозитория
  34. git bisect: бинарный поиск регрессии
  35. git blame, mailmap и археология кода
  36. Теги, релизы, archive и bundle
  37. Подмодули: внешние репозитории внутри проекта
  38. Subtree, монорепозитории и sparse-checkout
  39. Git LFS и большие файлы
  40. Вспомогательные команды: clean, mv, rm, restore
  41. Псевдонимы и кастомизация .gitconfig
  42. Хуки Git: автоматизация на клиенте и сервере
  43. Подпись коммитов и тегов: SSH, GPG и Sigstore
  44. Внутреннее устройство I: объектная база Git
  45. Внутреннее устройство II: ссылки, HEAD, notes и reftable
  46. Внутреннее устройство III: индекс, packfiles, gc и обслуживание
  47. От SHA-1 к SHA-256: переход на новый хеш
  48. Огромные репозитории: partial clone, FSMonitor, Scalar
  49. Git в CI/CD: shallow, кеш, merge_group и безопасность
  50. Куда движется Git: дорожная карта 3.0 и экосистема
  51. Профессиональный setup: собираем рабочее окружение Git
  52. 30+ типичных ошибок Git и как из них выбираться
Терминал - это не страшно, это просто диалог

Давай честно. Если ты тут впервые, то черное окно с мигающим курсором вызывает легкий холодок. Где кнопки? Куда тыкать мышкой? А вдруг я напишу что-то не то и сломаю компьютер? Спокойно. Терминал - это не пульт от ядерной бомбы, а просто текстовый чат с компьютером. Ты пишешь команду, жмешь Enter, машина отвечает текстом. Все. Никакой магии.

Этот урок - мост. Дальше по курсу мы полезем во внутренности Git, в объекты и хеши, в три дерева и графы коммитов. Но прежде чем строить дом, надо научиться держать молоток. Беда многих новичков в том, что они тонут в командной строке еще до первого git init: не понимают, где они находятся, путаются в путях, копируют чужие шпаргалки и боятся опечататься. Сегодня мы это лечим. И главное - я научу тебя спрашивать справку у самого Git, чтобы ты не зависел от чужих заметок и форумов.
Терминал ничего не делает, пока ты не нажмешь Enter. Набрал ерунду - просто сотри и набери заново. Команда не выполняется, пока ты ее не подтвердил.
Один важный момент про окружение. На Windows для Git ставят Git Bash - это маленький Linux-подобный терминал внутри Windows, где работают команды вроде ls и pwd. На macOS и Linux у тебя уже есть Terminal из коробки. Команды Git везде одинаковы, а вот команды навигации в Git Bash будут как в Linux, поэтому в этом уроке мы говорим на одном языке независимо от твоей системы. Основы командной строки одни для всех.

Изображение

Где я нахожусь: pwd, ls, cd и устройство путей

Терминал всегда находится в какой-то папке. Это называется текущий рабочий каталог. Все команды по умолчанию выполняются именно тут. Первое выживательное умение - всегда знать, где ты. Три команды решают 90 процентов навигации.

Код: Выделить всё

pwd            # print working directory - показать, где я сейчас
ls             # list - что лежит в текущей папке
cd <папка>     # change directory - перейти в другую папку
Смотрим на реальный вывод. Открыл терминал, набрал pwd:

Код: Выделить всё

$ pwd
/Users/anna/projects
Git ответил полным путем от корня файловой системы. Это и есть абсолютный путь - он начинается с косой черты / (на Windows в Git Bash тоже с косой, например /c/Users/anna) и однозначно указывает место, откуда бы ты его ни читал. Теперь посмотрим, что внутри:

Код: Выделить всё

$ ls
notes.txt   site   old_backup
$ ls -la
total 16
drwxr-xr-x   5 anna  staff   160 Jun 15 10:02 .
drwxr-xr-x  12 anna  staff   384 Jun 14 18:30 ..
-rw-r--r--   1 anna  staff   220 Jun 15 09:55 notes.txt
drwxr-xr-x   8 anna  staff   256 Jun 15 10:01 site
Флаг -l дал длинный формат (права, владелец, размер, дата), а -a показал скрытые имена, которые начинаются с точки. Запомни две странные строки: одиночная точка . - это сама текущая папка, а две точки .. - это папка на уровень выше, родительская. Они нам сейчас пригодятся. Кстати, именно как скрытая папка .git будет жить служебный каталог Git - вот почему -a так важен.

Теперь переходим между папками. Тут есть два стиля адресации, и понять разницу между ними - половина успеха в терминале.
  • Абсолютный путь начинается с / и задает место от корня. Например /Users/anna/projects/site. Работает всегда, откуда бы ты ни шел.
  • Относительный путь отсчитывается от того, где ты прямо сейчас. site - это подпапка тут же. ../old_backup - это подняться на уровень вверх и зайти в соседнюю папку.

Код: Выделить всё

$ cd site          # относительный: войти в подпапку site
$ pwd
/Users/anna/projects/site
$ cd ..            # подняться на уровень вверх
$ pwd
/Users/anna/projects
$ cd ~             # перейти в свой домашний каталог
$ pwd
/Users/anna
Символ тильда ~ - это сокращение для твоего домашнего каталога (на macOS /Users/имя, на Linux /home/имя). Очень удобно: cd ~ из любого места телепортирует домой, а ~/projects сразу указывает на проекты, где бы ты ни был. Просто cd без аргументов делает то же самое - ведет домой. А cd - (дефис) возвращает в предыдущую папку, где ты был до этого. Маленький трюк, экономящий кучу времени.

Три ускорителя: Tab, стрелки и Ctrl+C

Теперь то, что отличает уверенного пользователя терминала от страдальца. Это не знание сотен команд, а три приема, которые ты будешь использовать каждую минуту.

Tab-автодополнение. Начни печатать имя папки или команды и нажми Tab. Терминал сам допишет остаток, если вариант однозначный. Набрал cd si и Tab - получил cd site/. Если вариантов несколько, двойной Tab покажет список. Это не просто лень - это страховка от опечаток. Если Tab ничего не дописал, значит такого файла нет или ты не там, где думаешь. Tab честнее любой шпаргалки.

История команд стрелками. Нажми стрелку вверх - вернется предыдущая команда. Еще раз - позапрошлая. Не нужно перенабирать длинные строки: пролистал историю, поправил, запустил. Команда history покажет весь список, а Ctrl+R запускает поиск по истории - начни печатать кусок старой команды и она найдется.

Ctrl+C - твоя кнопка паники. Запустил что-то не то, команда зависла, вывод льется бесконечно? Жми Ctrl+C. Это посылает программе сигнал прерывания и возвращает тебе чистую строку приглашения. Запомни это сразу: Ctrl+C - аварийный выход. Он почти никогда ничего не ломает, просто останавливает текущее действие. И отдельно: если Git открыл тебе текстовый просмотрщик (например длинный вывод git log залил весь экран) - это пейджер, выход из него по клавише q.

Как вообще устроен запуск git и как читать синопсис

Git - это одна программа с кучей подкоманд. Общая форма всегда такая:

Код: Выделить всё

git <команда> [опции] [аргументы]
git status
git commit -m "первый коммит"
git log --oneline -5
Сначала слово git, потом подкоманда (status, commit, log), потом опции и аргументы. Опции бывают короткие (одна буква с одним дефисом, -m) и длинные (слово с двумя дефисами, --message). Часто это одно и то же разными словами: -m и --message эквивалентны. Короткие удобно набирать, длинные удобно читать в скриптах и чужих примерах.

Прежде чем что-то делать, проверь, что Git вообще установлен и какой версии:

Код: Выделить всё

$ git --version
git version 2.54.0
$ which git            # где лежит исполняемый файл (macOS/Linux/Git Bash)
/usr/bin/git
На Windows в обычном PowerShell аналог which - это where git. Версия важна: в этом курсе мы калибруемся на современную линию 2.5x (актуальная середины 2026 - 2.54), и некоторые приятные вещи вроде стабильных git switch и git restore появились недавно. Если у тебя что-то сильно старше - обнови, иначе примеры могут расходиться.

Теперь ключевой навык, ради которого половина урока. Когда ты смотришь справку команды, ты видишь синопсис - формальную запись того, что команда принимает. Ее надо уметь читать, иначе любая документация кажется шифром. Правила простые:
  • Квадратные скобки [ ] - это необязательная часть. Можно указать, можно нет.
  • Угловые скобки < > - это место, куда ты подставляешь свое значение. <file> значит впиши сюда имя файла, сами скобки не печатаются.
  • Вертикальная черта | - выбор одного из вариантов, или то, или это.
  • Многоточие ... - можно повторить несколько раз (например несколько файлов подряд).
Посмотрим на реальный синопсис из короткой справки git add:

Код: Выделить всё

$ git add -h
usage: git add [<options>] [--] <pathspec>...

    -n, --dry-run         dry run
    -v, --verbose         be verbose
    -f, --force           allow adding otherwise ignored files
    -p, --patch           select hunks interactively
Расшифровываем по нашим правилам. [<options>] в скобках - опции необязательны. [--] - редкий служебный разделитель, тоже необязателен (он говорит "дальше идут имена файлов, а не опции"). А вот <pathspec>... без скобок и с многоточием - значит обязательно укажи хотя бы один путь, а можно и несколько. Прочитал синопсис - и уже знаешь, как звать команду, без всякой шпаргалки.

Как пользоваться git: спрашивай справку у самого Git

Вот теперь самое ценное. Тебе не нужно держать в голове все флаги и не нужно зависеть от чужих заметок в интернете, которые часто устаревшие или просто неверные. У Git встроена исчерпывающая справка, и есть три уровня глубины. Это и есть честный ответ на вопрос как пользоваться git: не зубрить, а спрашивать.

Код: Выделить всё

git <команда> -h        # короткая шпаргалка прямо в терминал (один экран)
git <команда> --help    # полное руководство (man-страница, открывается в пейджере)
git help <команда>      # то же самое, что и --help, полная документация
man git                 # общая страница про сам Git
Разница принципиальная и ее путают. Один дефис -h дает краткую выжимку списком опций прямо в терминал - идеально, когда забыл точное имя флага и нужно подсмотреть за секунду. Два дефиса --help (или git help команда) открывает полное руководство со всеми подробностями, примерами и описанием каждой опции - это уже чтение, обычно в пейджере, выход по q. Запомни мнемонику: мало букв (-h) - мало текста, много букв (--help) - много текста.

Код: Выделить всё

$ git commit -h
usage: git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>]
                  [--amend] [--dry-run] [(-c | -C | --squash) <commit>]
                  [-F <file> | -m <msg>] [...] [--] [<pathspec>...]

    -m, --message <message>   commit message
    -a, --all                 commit all changed files
    --amend                   amend previous commit
Видишь? За три секунды ты узнал, что -m принимает сообщение, -a коммитит все измененное, а --amend правит прошлый коммит. Не нужна никакая внешняя шпаргалка - Git сам себе документация. А если нужно глубже, чем строчка описания, открываешь полный man через git help commit и читаешь раздел с примерами внизу - там почти всегда есть готовые рецепты.

Отдельно полезные точки входа в справку, которые стоит знать:

Код: Выделить всё

git help -a        # список ВСЕХ доступных команд
git help -g        # список путеводителей (guides), напр. gittutorial, giteveryday
git help glossary  # словарь терминов Git - что такое HEAD, blob, ref и т.д.
git help glossary - недооцененная вещь для новичка. Когда встретишь незнакомое слово вроде blob или ref (а мы их скоро будем разбирать), там есть короткое официальное определение.

Git подсказывает опечатки: help.autocorrect

Ты будешь опечатываться. Все опечатываются. Напишешь git stauts вместо git status. По умолчанию Git вежливо предположит, что ты имел в виду, но команду не выполнит:

Код: Выделить всё

$ git stauts
git: 'stauts' is not a git command. See 'git --help'.

The most similar command is
	status
Git уже угадал правильную команду - просто пока не решился ее запустить сам. Это поведение настраивается через help.autocorrect. Включим, чтобы Git исправлял за тебя:

Код: Выделить всё

$ git config --global help.autocorrect prompt
$ git stauts
WARNING: You called a Git command named 'stauts', which does not exist.
Run 'status' instead [y/N]?
Значение prompt спросит подтверждение перед запуском исправленного варианта - самый безопасный режим. Есть и другие значения: immediate выполнит исправленную команду сразу без вопросов; never полностью отключит подсказки; а число, например 20, означает задержку в десятых долях секунды перед автозапуском (20 - это 2 секунды на то, чтобы передумать и нажать Ctrl+C). Для начала ставь prompt: и опечатки прощает, и решение оставляет за тобой. Команда git config мы разберем подробно в отдельном уроке, пока просто прими, что --global записывает настройку для всех твоих проектов.

Типичные грабли новичка в терминале
  • Запускаешь команду не в той папке. Самая частая ошибка. fatal: not a git repository значит ты не внутри проекта с Git. Лекарство одно: pwd и ls -a, посмотри где ты и есть ли тут папка .git. Привычка проверять pwd перед важной командой спасает нервы.
  • Путаешь -h и --help в чужих скриптах. У многих команд -h это справка, но не у всех - бывает, короткий флаг занят под другое. Если -h повел себя странно, надежнее git help команда.
  • Копируешь команду со знаком $ в начале. Доллар - это не часть команды, а изображение приглашения терминала (приглашение root рисуют как #). Копируй то, что после $.
  • Пробелы в именах папок. cd My Project не сработает - терминал решит, что это два аргумента. Бери в кавычки: cd "My Project". И вообще двойной Tab покажет тебе реальное имя - не угадывай.
  • Залип в пейджере или в редакторе. Длинный вывод залил экран - это пейджер, жми q. Git внезапно открыл незнакомый текстовый редактор для сообщения коммита (часто это vim) - это тема будущего урока, а сейчас аварийный выход из vim: нажми Esc, потом набери :q! и Enter.
Мини-лаба: пройди руками за 5 минут

Открой терминал (на Windows - Git Bash) и повтори по шагам. Цель - почувствовать навигацию и справку пальцами, а не глазами.

Код: Выделить всё

# 1. Где я и что вокруг
pwd
ls -la

# 2. Пойдем домой и создадим площадку
cd ~
mkdir git-lab
cd git-lab
pwd                      # убедись, что ты внутри git-lab

# 3. Поиграем с путями
mkdir -p inner/deep
cd inner/deep
pwd                      # глубоко внутри
cd ../..                 # два уровня вверх, обратно в git-lab
pwd

# 4. Проверь сам Git и спроси у него справку
git --version
git help -g              # список путеводителей, выйди по q
git log -h               # короткая справка, читается за секунду
git config --global help.autocorrect prompt

# 5. Потренируй ускорители
#   - набери "cd inn" и нажми Tab (допишет inner/)
#   - нажми стрелку вверх несколько раз, полистай историю
#   - запусти git help glossary и выйди по q
Если все шаги прошли без паники - база заложена. Ты умеешь понять где ты, перемещаться, читать синопсис и спрашивать Git напрямую. Это фундамент, на котором стоит весь остальной курс.

Контрольные вопросы
  • Чем абсолютный путь /Users/anna/site отличается от относительного ../site, и какой из них сработает одинаково из любой папки?
  • В синопсисе git add [<options>] [--] <pathspec>... - что обязательно, а что нет, и почему у pathspec стоит многоточие?
  • В чем разница между git status -h и git status --help, и когда какой выбрать?
  • Ты набрал git comit -m "..." и видишь подсказку про commit. Какая настройка заставит Git предлагать запуск исправленной команды, и какое значение самое безопасное?
Итог

Терминал - это диалог, а не экзамен. Три команды навигации (pwd, ls, cd), понимание абсолютных и относительных путей с ~ и точками, три ускорителя (Tab, стрелки, Ctrl+C) - и ты уже не тонешь. А главный навык урока - не зубрить флаги, а спрашивать у самого Git: -h для быстрой шпаргалки, --help и git help для глубины, help.autocorrect чтобы прощал опечатки. Теперь чужие шпаргалки тебе не указ - у тебя есть встроенный справочник. В следующем уроке наконец делаем git init и заглядываем внутрь .git, где живет вся механика.
👍7 ❤️1 🔥1 😄 🤔
Аватара пользователя
envoypilot
Сообщения: 1
Зарегистрирован: 11 май 2026, 05:50

Re: Терминал и как спрашивать у Git: выживание в командной строке

Сообщение envoypilot »

Я думала терминал это что-то для хакеров, а тут просто чат с компом оказался. Особенно зашло про -h против --help, всегда путала зачем их два.
👍1 ❤️ 🔥 😄 🤔1
Аватара пользователя
torch13
Сообщения: 1
Зарегистрирован: 15 май 2026, 09:06

Re: Терминал и как спрашивать у Git: выживание в командной строке

Сообщение torch13 »

Ctrl+C реально кнопка паники, спасибо. Вчера git log залил весь экран и я не знал как вылезти, оказывается просто q. А про cd - (дефис) вообще не знал, удобно.
👍1 ❤️ 🔥1 😄 🤔
Ответить
← Предыдущая глава
Установка Git на Windows, macOS и Linux и первая настройка
Следующая глава →
Ментальная модель Git: три состояния, коммит-снимок и граф

Все главы курса «Git профессионально: от первого коммита до внутреннего устройства»

Поделиться темой: ✈ Telegram VK
Похожие запросы: Git команды для начинающих

Вернуться в «Git профессионально: от первого коммита до внутреннего устройства»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость