Git
Git — распределённая система контроля версий. Repository хранит snapshots в графе commits; GitHub и другие hosting-сервисы хранят remotes, но не являются самим Git.
Рабочая модель
working tree → git add → index → git commit → local history
→ git push → remote- working tree — текущие файлы;
- index/staging area — точное содержимое следующего commit;
- commit — snapshot, metadata и ссылки на parent commits;
- branch — перемещаемая ссылка на commit;
HEAD— текущая выбранная ссылка/commit.
Ежедневный цикл
git status --short
git diff
git diff --staged
git add notes/REST.md
git commit -m "docs: clarify REST semantics"
git fetch origin
git log --oneline --decorate --graph -10Перед commit проверяю staged diff: git diff не показывает уже staged изменения.
Merge, rebase и revert
- merge создаёт commit с двумя parents или fast-forward и сохраняет ветвление;
- rebase переносит commits на новую base и переписывает их identities;
- revert создаёт новый commit, отменяющий выбранное изменение;
- reset перемещает ссылку и в некоторых режимах меняет index/working tree.
Для опубликованной общей истории предпочитаю revert, если команда не договорилась о rewrite. См. Отмена merge.
Remote
fetch обновляет remote-tracking refs без изменения working tree. pull — составная операция fetch плюс integration, поэтому перед ней полезно понимать выбранную стратегию.
git remote -v
git fetch --prune origin
git branch -vvМой реальный случай
JavaNotes начинался как локальная Obsidian-база, затем я связал её с Git и открыл на GitHub. Git дал историю правок, а GitHub Actions — автоматическую проверку ссылок и структуры перед публикацией. Следующий шаг — GitHub Pages, чтобы сайт собирался рядом с репозиторием без отдельного сервера. См. Как я веду и публикую JavaNotes.
Типичные сбои
- Закоммитить secret и удалить только новым commit: значение остаётся в истории.
- Сделать rebase общей branch и сломать ссылки коллег.
- Перепутать
git diffиgit diff --staged. - Запустить destructive reset в dirty working tree.
- Считать remote-tracking branch автоматически обновляемой без fetch.
Вопросы для собеседования
Что хранит commit? Snapshot дерева, metadata и parent reference(s).
Чем fetch отличается от pull? Fetch только получает refs/objects, pull затем интегрирует их в текущую branch.
Что такое staging area? Подготовленный snapshot следующего commit.
Когда нужен revert? Чтобы отменить опубликованный commit новым, не переписывая историю.
GitHub — это Git? Нет, это hosting и collaboration вокруг Git repositories.
См. Файл gitignore, SSH протокол.