Git: основы
Репозиторий, коммит, staging area, команды на каждый день и .gitignore.
Обновлено
Что такое Git
Git — система контроля версий: она хранит полную историю проекта — каждое изменение, кто его сделал, когда и зачем. Можно в любой момент вернуться к прошлой версии, работать параллельно с другими и пробовать идеи, не ломая то, что работает.
GitHub (или GitLab) — сервис, который хранит Git-репозитории онлайн и добавляет совместную работу: pull request-ы, ревью, CI. Git ≠ GitHub.
Базовые понятия
| Термин | Что это |
|---|---|
| репозиторий (repo) | проект + вся его история (скрытая папка .git) |
| коммит | «снимок» проекта в определённый момент, с сообщением |
| ветка (branch) | независимая линия разработки (следующий урок) |
| remote | копия репозитория на сервере (origin) |
| HEAD | где вы сейчас находитесь в истории |
3 зоны
У Git есть три «места», через которые проходит изменение:
working directoryваши файлыgit add→staging areaчто попадёт в коммитgit commit→repositoryисторияStaging area (индекс) позволяет выбрать ровно то, что попадёт в коммит: можно изменить 5 файлов и сделать два отдельных логичных коммита.
Команды на каждый день
| Команда | Что делает |
|---|---|
git status |
что изменилось и что в staging — запускайте часто |
git diff |
изменения, которых ещё нет в staging |
git add <файл> / git add -p |
добавить в staging (весь файл / по частям) |
git commit -m "сообщение" |
создать коммит |
git log --oneline |
компактная история |
git pull |
забрать и встроить изменения с remote |
git push |
отправить свои коммиты на remote |
git restore <файл> |
отменить незакоммиченные изменения в файле |
git stash / git stash pop |
временно отложить изменения |
Хороший коммит
- Маленький и логичный — одно изменение (баг, маленькая фича). Легко читать на ревью, легко отменить.
- Сообщение объясняет зачем, а не только что: «fix: сохранять корзину после входа» > «update».
- Код работает после каждого коммита (сборка не сломана).
.gitignore
Файл .gitignore говорит, что никогда не попадает в Git:
node_modules/ # зависимости — переустанавливаются из package-lock
.next/ # сборка
.env* # СЕКРЕТЫ — никогда в Git
*.log
.DS_Store
Если вы случайно закоммитили секрет и сделали push, считайте его скомпрометированным: смените его (ротируйте ключ), а не просто удалите из кода.
Отмена ошибок — виды и когда
| Ситуация | Команда |
|---|---|
| незакоммиченные изменения в файле | git restore файл |
| случайно добавили что-то в staging | git restore --staged файл |
| у последнего коммита неверное сообщение / забыли файл (push ещё не делали) | git commit --amend |
| отменить уже опубликованный коммит | git revert <hash> — создаёт новый коммит, который делает обратное |
| «всё сломал локально» | git reflog — история всех положений HEAD, откуда можно восстановить почти всё |
Золотое правило: не переписывайте опубликованную историю (amend, rebase, reset на коммитах, уже отправленных в общую ветку).
Коротко
- Git = история версий; GitHub = хостинг + совместная работа.
- working directory →
add→ staging →commit→ история. - Маленькие логичные коммиты с понятными сообщениями; секреты — в
.gitignore.