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

Где я нахожусь: pwd, ls, cd и устройство путей
Терминал всегда находится в какой-то папке. Это называется текущий рабочий каталог. Все команды по умолчанию выполняются именно тут. Первое выживательное умение - всегда знать, где ты. Три команды решают 90 процентов навигации.
Код: Выделить всё
pwd # print working directory - показать, где я сейчас
ls # list - что лежит в текущей папке
cd <папка> # change directory - перейти в другую папку
Код: Выделить всё
$ pwd
/Users/anna/projects
Код: Выделить всё
$ 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
Теперь переходим между папками. Тут есть два стиля адресации, и понять разницу между ними - половина успеха в терминале.
- Абсолютный путь начинается с / и задает место от корня. Например /Users/anna/projects/site. Работает всегда, откуда бы ты ни шел.
- Относительный путь отсчитывается от того, где ты прямо сейчас. site - это подпапка тут же. ../old_backup - это подняться на уровень вверх и зайти в соседнюю папку.
Код: Выделить всё
$ cd site # относительный: войти в подпапку site
$ pwd
/Users/anna/projects/site
$ cd .. # подняться на уровень вверх
$ pwd
/Users/anna/projects
$ cd ~ # перейти в свой домашний каталог
$ pwd
/Users/anna
Три ускорителя: 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 вообще установлен и какой версии:
Код: Выделить всё
$ git --version
git version 2.54.0
$ which git # где лежит исполняемый файл (macOS/Linux/Git Bash)
/usr/bin/git
Теперь ключевой навык, ради которого половина урока. Когда ты смотришь справку команды, ты видишь синопсис - формальную запись того, что команда принимает. Ее надо уметь читать, иначе любая документация кажется шифром. Правила простые:
- Квадратные скобки [ ] - это необязательная часть. Можно указать, можно нет.
- Угловые скобки < > - это место, куда ты подставляешь свое значение. <file> значит впиши сюда имя файла, сами скобки не печатаются.
- Вертикальная черта | - выбор одного из вариантов, или то, или это.
- Многоточие ... - можно повторить несколько раз (например несколько файлов подряд).
Код: Выделить всё
$ 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
Как пользоваться git: спрашивай справку у самого Git
Вот теперь самое ценное. Тебе не нужно держать в голове все флаги и не нужно зависеть от чужих заметок в интернете, которые часто устаревшие или просто неверные. У Git встроена исчерпывающая справка, и есть три уровня глубины. Это и есть честный ответ на вопрос как пользоваться git: не зубрить, а спрашивать.
Код: Выделить всё
git <команда> -h # короткая шпаргалка прямо в терминал (один экран)
git <команда> --help # полное руководство (man-страница, открывается в пейджере)
git help <команда> # то же самое, что и --help, полная документация
man git # общая страница про сам Git
Код: Выделить всё
$ 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
Отдельно полезные точки входа в справку, которые стоит знать:
Код: Выделить всё
git help -a # список ВСЕХ доступных команд
git help -g # список путеводителей (guides), напр. gittutorial, giteveryday
git help glossary # словарь терминов Git - что такое HEAD, 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 config --global help.autocorrect prompt
$ git stauts
WARNING: You called a Git command named 'stauts', which does not exist.
Run 'status' instead [y/N]?
Типичные грабли новичка в терминале
- Запускаешь команду не в той папке. Самая частая ошибка. 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.
Открой терминал (на 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
Контрольные вопросы
- Чем абсолютный путь /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, где живет вся механика.