База знаний
Справочник с поиском по командам git из книги.
Каждая статья объясняет одну команду и показывает пример с настоящим выводом. Ищи по названию или смотри по группам ниже. Внизу каждой статьи есть ссылка на главу, где тема разбирается подробно.
Настройка и репозиторий
5- git config: имя, почта и настройкиgit config хранит настройки git: имя и почту, которыми подписывается каждый коммит, редактор для сообщений и остальные ключи.
- Алиасы git: короткие имена для длинных командАлиас - это своё короткое имя для команды git, заданное через git config.
- Переводы строк: LF, CRLF и .gitattributesКонец строки в текстовом файле в Linux и macOS записывается одним символом (LF), а в Windows двумя (CR и LF).
- git init: сделать из папки репозиторийgit init превращает обычную папку в репозиторий: создаёт внутри неё скрытый каталог .git, где дальше будет лежать вся история проекта.
- git clone: скопировать чужой репозиторийgit clone забирает готовый репозиторий целиком: всю историю, все ветки и файлы последнего коммита.
Коммиты
7- git status: что сейчас происходит в репозиторииgit status отвечает на вопрос «где я и что у меня лежит»: на какой ты ветке, какие файлы изменены и что уже отобрано в следующий коммит.
- git add: положить изменения в индексgit add переносит изменения из рабочего каталога в индекс (staging area) - в набор, который целиком попадёт в следующий коммит.
- git commit: зафиксировать снимокgit commit сохраняет то, что лежит в индексе, отдельным снимком: с автором, временем, твоим сообщением и уникальным хешем.
- git commit --amend: поправить последний коммитgit commit --amend заменяет последний коммит новым: с исправленным сообщением, с забытым файлом или с тем и другим сразу.
- Сообщение коммита: как его писатьСообщение коммита объясняет, зачем сделано изменение, тому, кто откроет историю через полгода.
- git rm и git mv: удалить и переименовать под присмотром gitgit rm удаляет файл и сразу кладёт это удаление в индекс, а git mv так же переименовывает.
- Хуки git: почему коммит не проходитТы набираешь git commit, а вместо нового коммита в терминале появляется сообщение от линтера или проверки, и коммит не создан.
История и изменения
6- git log: история проектаgit log показывает историю репозитория: коммиты от самого свежего к самому старому, у каждого свой автор, дата и сообщение.
- git diff: что именно изменилосьgit diff показывает построчную разницу: какие строки исчезли, какие появились и в каком месте файла это произошло.
- git show: посмотреть один коммит целикомgit show печатает один объект репозитория целиком: сообщение коммита, автора, дату и полный diff этого коммита.
- git blame: кто и когда изменил каждую строкуgit blame <файл> печатает файл построчно и приписывает к каждой строке коммит, автора и дату, когда эта строка получила нынешний вид.
- git bisect: найти коммит, который сломал проектgit bisect двоичным поиском находит первый коммит, после которого проект сломался: ты называешь рабочий и сломанный коммит, а git делит промежуток пополам до одного виновника.
- .gitignore: что git не должен замечать.gitignore - это файл со списком того, что git должен игнорировать: временные файлы, каталоги зависимостей, собранные артефакты, локальные секреты.
Отмена изменений
8- git restore: вернуть файл и вынуть его из индексаgit restore отменяет сделанное на уровне файла: с флагом --staged убирает файл из индекса, без флага возвращает его к виду из последнего коммита.
- git reset: сдвинуть указатель ветки назадgit reset переставляет указатель текущей ветки на другой коммит, а режимы --soft, --mixed и --hard решают, что при этом станет с индексом и с файлами.
- git revert: отменить коммит новым коммитомgit revert создаёт новый коммит, который отменяет изменения указанного, при этом сам отменяемый коммит остаётся в истории на своём месте.
- git clean: удалить неотслеживаемые файлыgit clean стирает из рабочего каталога файлы, о которых git ничего не знает: собранные артефакты, временные файлы, распакованный куда попало архив.
- git stash: спрятать незаконченную работуgit stash снимает незаконченные правки с рабочего каталога, откладывает их в отдельный список и возвращает файлы к состоянию последнего коммита.
- git reflog: журнал перемещений HEADgit reflog показывает список всех мест, где стоял HEAD, и хранит хеши даже тех коммитов, которые уже пропали из git log.
- Как отменить последний коммит«Отменить коммит» - это четыре разные операции, и выбор между ними решают два вопроса: ушёл ли коммит на сервер и что должно стать с его изменениями.
- Как вернуть удалённый файлКуда делся файл и как его достать - зависит от того, на каком шаге он пропал.
Ветки и слияния
9- git branch: список, создание и удаление ветокgit branch перечисляет ветки репозитория, создаёт новую и удаляет ту, что больше не нужна.
- git switch: переход между веткамиgit switch <ветка> переводит тебя на другую ветку и переписывает файлы в рабочем каталоге под её последний коммит.
- git checkout: одна команда с тремя ролямиgit checkout делает три разные вещи: переключает ветки, достаёт файлы из коммита и ставит тебя прямо на коммит без ветки.
- main и master: два имени главной веткиmain и master - это два имени для главной ветки репозитория, и никакой технической разницы между ними нет: обе устроены так же, как любая другая ветка.
- git merge: слияние ветокgit merge <ветка> вливает названную ветку в ту, на которой ты стоишь сейчас.
- Конфликт слияния: как его разобратьКонфликт слияния возникает, когда две ветки по-разному изменили одну и ту же строку, и git не берётся решить за тебя, чей вариант верный.
- git cherry-pick: перенести один коммит в текущую веткуgit cherry-pick <хеш> берёт изменения одного коммита из другой ветки и накладывает их на ту ветку, где ты стоишь сейчас.
- detached HEAD: стоишь на коммите, а не на веткеСостояние detached HEAD значит, что HEAD указывает прямо на коммит, а не на имя ветки, поэтому новым коммитам некуда прирастать.
- git rebase: перенос коммитов поверх чужихgit rebase переписывает твои коммиты так, будто ты начал работу уже после того, как коллега закончил свою.
Удалённые репозитории
12- git remote: связь с удалённым репозиториемgit remote управляет списком адресов, по которым репозиторий обменивается коммитами с сервером.
- SSH-ключ для GitHubSSH-ключ - это пара файлов, которая заменяет пароль при обмене с GitHub: открытую половину отдаёшь серверу, закрытую держишь у себя и никому не показываешь.
- git push: отправить коммиты на серверgit push копирует коммиты из твоей локальной ветки в удалённый репозиторий и двигает там ветку вперёд.
- git push --force: переписать историю на сервереgit push --force заменяет серверную ветку твоей локальной версией, даже если коммиты, которые лежали на сервере, после этого станут недостижимы.
- git pull: забрать чужие измененияgit pull скачивает новые коммиты с сервера и сразу вливает их в твою текущую ветку.
- git fetch: посмотреть, что нового на сервереgit fetch скачивает свежие коммиты с сервера, но не трогает ни твою ветку, ни файлы на диске.
- Pull request и merge requestPull request - это предложение влить твою ветку в основную, оформленное отдельной страницей с обсуждением.
- Черновой pull request: показать работу раноЧерновой pull request (draft) - это тот же pull request, но помеченный как ещё не готовый к слиянию.
- Защищённая ветка: почему push в main отклонёнПытаешься отправить коммит прямо в main, а сервер отвечает отказом: ветка защищена, и писать в неё напрямую нельзя.
- Fork: своя копия чужого репозиторияFork - это копия чужого репозитория, сделанная на твоём аккаунте GitHub, куда у тебя есть право писать.
- git submodule: клонировал, а папка пустаяПодмодуль (submodule) - это ссылка на другой репозиторий, вложенный внутрь твоего.
- git tag: метки версий и релизовМетка (tag) - это постоянное имя для одного конкретного коммита, и в отличие от ветки она никуда не двигается.