Основные команды 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-изменения

Практика

  1. Создайте новый репозиторий с git init
  2. Создайте 3 файла, добавьте их по одному и сделайте 3 отдельных коммита
  3. Используйте git log --oneline чтобы увидеть историю
  4. Измените файл и посмотрите git diff
  5. Добавьте файл в staging и посмотрите git diff --staged
  6. Попробуйте git log --oneline --graph --all
  7. Клонируйте любой публичный репозиторий с GitHub

Связанные темы

Ресурсы