Урок 02

Основные команды Git

Статус репозитория

git status

Показывает: какие файлы изменены, что добавлено в staging, что не отслеживается.

Самая частая команда. Используй её перед каждым коммитом.

Просмотр изменений

git diff                     # что изменил, но не добавил
git diff --staged            # что добавил в staging
git diff HEAD~1              # разница с предыдущим коммитом
git diff branch1..branch2    # разница между ветками

Добавление в staging

git add file.txt             # конкретный файл
git add .                    # все изменения
git add *.php                # все PHP-файлы
git add folder/              # всю папку
git add -p                   # интерактивно (по частям)

git add -p — мощная штука. Если в файле несколько несвязанных изменений, можно добавить только часть.

Удаление из staging

git restore --staged file.txt    # убрать из staging
git restore --staged .           # убрать всё

Коммит

git commit -m "Fix: исправил баг с авторизацией"
git commit -am "Fix: ..."       # сразу add + commit (только для отслеживаемых файлов)
git commit --amend               # изменить последний коммит

Хорошие сообщения коммитов

Conventional Commits — стандарт, который понимают все:

feat: добавить регистрацию пользователей
fix: исправить ошибку при пустом email
docs: обновить README
refactor: вынести логику в сервис
test: добавить тест на регистрацию
chore: обновить зависимости
style: форматирование кода
perf: ускорить запрос на 30%

Правило: тип: что сделано — в настоящем времени, до 72 символов.

Плохо: fix, update, qwerty, asdfgh. Хорошо: fix: исправить 500 на странице профиля.

История

git log                      # вся история
git log --oneline            # кратко
git log --oneline -10        # последние 10
git log --graph --oneline    # с графом веток
git log --author="Иван"      # коммиты автора
git log -- file.txt          # история файла
git log -p file.txt          # с диффами

Отмена изменений

git restore file.txt         # откатить файл до последнего коммита
git restore .                # откатить все файлы
git restore --source=HEAD~1 file.txt  # откатить до конкретного коммита

⚠️ git restore уничтожает твои правки. Если хочешь сохранить — сначала git stash.

Stash — временное хранилище

git stash                    # спрятать все изменения
git stash -u                 # включая неотслеживаемые файлы
git stash list               # список stash'ей
git stash pop                # вернуть последний
git stash apply stash@{2}    # вернуть конкретный
git stash drop               # удалить последний
git stash clear              # удалить все

Кейс: срочно надо переключиться на другую ветку, а правки незакоммичены. git stash — и переключайся.

Удаление файлов

git rm file.txt              # удалить и добавить удаление в staging
git rm -r folder/            # папку
git rm --cached file.txt     # убрать из Git, но оставить на диске

git rm --cached — когда файл случайно закоммитил (например, .env).

.gitignore

Файл в корне репозитория. Что в него попадает — Git игнорирует:

# Зависимости
node_modules/
vendor/

# Переменные окружения
.env
.env.local

# Сборка
dist/
build/
.next/

# IDE
.idea/
.vscode/
*.swp

# Логи
*.log
storage/logs/

# OS
.DS_Store
Thumbs.db

Правило: всё генерируемое (зависимости, сборка, логи, кеш) — в .gitignore.

Что делать, если файл уже в Git

Если .env уже закоммичен:

git rm --cached .env
echo ".env" >> .gitignore
git add .gitignore
git commit -m "Remove .env from tracking"

Итог

Минимальный цикл работы:

git status
git add .
git commit -m "feat: описание"
git push

Дальше — ветки и переключение.