Основные команды Git
Базовые команды для создания репозитория, отслеживания изменений и работы с историей
Зачем нужно
- Это ежедневные команды любого разработчика
- Без них невозможно сохранять и отслеживать изменения
- Составляют 80% всей работы с Git
Где используется
- Каждый рабочий день при разработке
- При первом создании проекта
- При изучении истории изменений
Предпосылки
Создание репозитория
git init — создать новый репозиторий
# Создать репозиторий в текущей папке
git init
# Создать репозиторий в новой папке
git init my-project
cd my-project
git clone — клонировать существующий
# Клонировать по HTTPS
git clone https://github.com/user/repo.git
# Клонировать по SSH
git clone git@github.com:user/repo.git
# Клонировать в папку с другим именем
git clone https://github.com/user/repo.git my-folder
# Клонировать только определённую ветку
git clone --branch develop https://github.com/user/repo.git
# Неглубокий клон (только последний коммит — быстрее)
git clone --depth 1 https://github.com/user/repo.git
Отслеживание изменений
git status — состояние репозитория
git status
# Пример вывода:
# On branch main
# Changes not staged for commit:
# modified: index.html
#
# Untracked files:
# style.css
# Краткий формат
git status -s
# M index.html ← modified
# ?? style.css ← untracked
Значения символов в git status -s:
| Символ | Значение |
|---|---|
M |
Modified (изменён) |
A |
Added (добавлен в staging) |
D |
Deleted (удалён) |
?? |
Untracked (не отслеживается) |
R |
Renamed (переименован) |
git add — добавить в staging area
# Добавить конкретный файл
git add index.html
# Добавить несколько файлов
git add index.html style.css
# Добавить все файлы в текущей папке
git add .
# Добавить все файлы определённого типа
git add "*.js"
# Добавить интерактивно (по частям)
git add -p
# Git покажет каждый изменённый блок и спросит — добавить?
git commit — сохранить изменения
# Коммит с сообщением
git commit -m "Добавить главную страницу"
# Коммит с подробным описанием (откроется редактор)
git commit
# Добавить все отслеживаемые файлы и сразу коммит
git commit -am "Исправить стили навигации"
# Внимание: -a добавляет ТОЛЬКО уже отслеживаемые файлы, не новые!
Анатомия хорошего сообщения коммита:
Добавить валидацию формы регистрации
- Проверка email через регулярное выражение
- Проверка длины пароля (минимум 8 символов)
- Вывод ошибок под полями ввода
Closes #42
Просмотр истории
git log — история коммитов
# Полный лог
git log
# Одна строка на коммит
git log --oneline
# Граф веток
git log --oneline --graph --all
# Последние N коммитов
git log -5
# Коммиты конкретного автора
git log --author="Ivan"
# Коммиты за период
git log --after="2025-01-01" --before="2025-12-31"
# Коммиты, затрагивающие файл
git log -- index.html
# Поиск по содержимому коммита
git log -S "functionName"
# Красивый формат
git log --pretty=format:"%h %an %ar - %s"
# a1b2c3d Ivan 2 hours ago - Добавить навигацию
git diff — сравнение изменений
# Изменения в рабочей директории (не добавленные в staging)
git diff
# Изменения в staging area
git diff --staged
# или
git diff --cached
# Разница между двумя коммитами
git diff abc1234 def5678
# Разница между ветками
git diff main feature-branch
# Diff конкретного файла
git diff index.html
# Только имена изменённых файлов
git diff --name-only
# Статистика изменений
git diff --stat
git show — информация о коммите
# Последний коммит
git show
# Конкретный коммит
git show a1b2c3d
# Содержимое файла в конкретном коммите
git show a1b2c3d:index.html
# Только имена изменённых файлов
git show --name-only a1b2c3d
Удаление и перемещение файлов
# Удалить файл и добавить удаление в staging
git rm old-file.js
# Удалить из отслеживания, но оставить на диске
git rm --cached secret.env
# Переименовать/переместить файл
git mv old-name.js new-name.js
# Эквивалентно:
# mv old-name.js new-name.js
# git add new-name.js
# git rm old-name.js
Полный рабочий цикл
# 1. Создаём проект
mkdir my-app && cd my-app
git init
# 2. Создаём файлы
echo "<!DOCTYPE html>" > index.html
echo "body { margin: 0; }" > style.css
# 3. Смотрим статус
git status
# Untracked files: index.html, style.css
# 4. Добавляем в staging
git add index.html style.css
# 5. Смотрим что в staging
git diff --staged
# 6. Коммитим
git commit -m "Создать начальную структуру проекта"
# 7. Редактируем файл
echo "<h1>Hello</h1>" >> index.html
# 8. Смотрим изменения
git diff
# +<h1>Hello</h1>
# 9. Добавляем и коммитим
git add index.html
git commit -m "Добавить заголовок на главную страницу"
# 10. Смотрим историю
git log --oneline
# b2c3d4e Добавить заголовок на главную страницу
# a1b2c3d Создать начальную структуру проекта
Частые ошибки
git add .без проверки — можно случайно добавить.env,node_modulesи т.д. Всегда проверяйтеgit statusперед коммитомgit commit -amдля новых файлов — флаг-aне добавляет untracked файлы, только modified- Огромные коммиты — коммитьте логические единицы работы, не "всё за день"
- Бессмысленные сообщения — "fix", "update", "changes" не несут информации
- Забыть про
--stagedв git diff — без него видны только unstaged-изменения
Практика
- Создайте новый репозиторий с
git init - Создайте 3 файла, добавьте их по одному и сделайте 3 отдельных коммита
- Используйте
git log --onelineчтобы увидеть историю - Измените файл и посмотрите
git diff - Добавьте файл в staging и посмотрите
git diff --staged - Попробуйте
git log --oneline --graph --all - Клонируйте любой публичный репозиторий с GitHub
Связанные темы
Ресурсы
- Git Cheat Sheet (GitHub) — шпаргалка
- Pro Git: Основы Git
- Git Reference — справочник команд