Git: Основные команды - практическая шпаргалка

Git — распределённая система контроля версий для хранения истории изменений, работы с ветками и совместной разработки.

Эта шпаргалка подходит для повседневной работы: создать или клонировать репозиторий, проверить изменения, сделать коммит, поработать в отдельной ветке и отправить результат на сервер.

Git не заменяет резервное копирование и не подходит для хранения паролей, приватных ключей, дампов баз данных и постоянно меняющихся крупных файлов. Такие данные нужно исключать через .gitignore или хранить отдельно.

Установка Git

Скачивайте Git с официального сайта проекта или из репозитория вашей операционной системы. Не используйте каталоги программ и сторонние сборки: установщик и менеджер учётных данных работают с доступом к вашим репозиториям.

Git for Windows включает консоль Git Bash, графический клиент Git GUI, интеграцию с проводником и Git Credential Manager для безопасного хранения учётных данных.

После установки откройте PowerShell, командную строку или Git Bash и проверьте результат:

git --version

Если команда не найдена, закройте и заново откройте терминал. В Windows также проверьте, добавлен ли Git в переменную окружения PATH.

Быстрый рабочий цикл

# Проверить состояние репозитория
git status --short

# Посмотреть незаписанные изменения
git diff

# Добавить нужный файл в индекс
git add -- path/to/file.php

# Проверить, что попадёт в коммит
git diff --staged

# Создать коммит
git commit -m "Исправлена обработка формы"

# Получить изменения с сервера
git pull --ff-only

# Отправить локальные коммиты
git push

git pull --ff-only обновляет ветку только через fast-forward. Если локальная и удалённая истории разошлись, Git остановится, чтобы разработчик осознанно выбрал merge или rebase.

Настройка и создание репозитория

# Проверить версию Git
git --version

# Настроить имя и email для всех репозиториев пользователя
git config --global user.name "Ivan Petrov"
git config --global user.email "ivan@example.com"

# Настроить данные только для текущего репозитория
git config --local user.name "Ivan Petrov"
git config --local user.email "ivan@company.example"

# Создать репозиторий с основной веткой main
git init -b main

# Клонировать существующий репозиторий
git clone <repository-url>

Локальные настройки имеют приоритет над глобальными. Это удобно, если для личных и рабочих проектов используются разные email.

Статус, индекс и коммиты

# Подробный или компактный статус
git status
git status --short

# Изменения, которые ещё не добавлены в индекс
git diff

# Изменения, подготовленные к коммиту
git diff --staged

# Добавить один файл
git add -- path/to/file.php

# Добавить PHP-файлы по маске
git add -- '*.php'

# Добавить все изменения в репозитории
git add -A

# Выбрать отдельные фрагменты изменений
git add -p

# Создать коммит
git commit -m "Добавлена валидация email"

# Добавить и закоммитить изменения в уже отслеживаемых файлах
git commit -am "Обновлена конфигурация"

git commit -am не добавляет новые файлы. Если файл ещё не отслеживается, сначала выполните git add.

Аргумент -- отделяет параметры команды от путей. Это защищает от неоднозначности, если имя файла начинается с дефиса.

Ветки и слияние

# Показать локальные ветки
git branch

# Показать локальные и удалённые ветки
git branch -a

# Создать ветку и переключиться на неё
git switch -c feature/contact-form

# Переключиться на существующую ветку
git switch main

# Вернуться к предыдущей ветке
git switch -

# Проверить текущую ветку
git branch --show-current

# Слить указанную ветку в текущую
git merge feature/contact-form

# Удалить слитую локальную ветку
git branch -d feature/contact-form

Git всегда вливает указанную ветку в текущую. Поэтому перед git merge полезно проверить результат команды git branch --show-current.

В старых версиях Git вместо git switch -c branch-name используется git checkout -b branch-name.

Удалённый репозиторий и синхронизация

# Посмотреть удалённые репозитории
git remote -v

# Подключить удалённый репозиторий
git remote add origin <repository-url>

# Переименовать текущую ветку в main
git branch -M main

# Первая отправка с настройкой upstream
git push -u origin main

# Получить сведения об изменениях без слияния
git fetch origin

# Получить изменения и убрать устаревшие ссылки на удалённые ветки
git fetch --prune

# Обновить текущую ветку только через fast-forward
git pull --ff-only

# Отправить текущую ветку
git push

git fetch загружает новые коммиты и ссылки на ветки, но не изменяет рабочие файлы. Это удобный способ сначала посмотреть изменения, а затем решить, как их объединить.

Не используйте git push --force без необходимости: команда может перезаписать чужие коммиты. Когда переписывание истории действительно согласовано, безопаснее git push --force-with-lease.

Временное сохранение работы

# Сохранить отслеживаемые и новые файлы
git stash push -u -m "Незавершённая форма заказа"

# Посмотреть список сохранений
git stash list

# Вернуть последнее сохранение и удалить его из stash
git stash pop

# Применить сохранение, не удаляя его
git stash apply stash@{0}

git stash удобен для короткого переключения между задачами. Важную работу лучше сохранить в отдельной ветке и зафиксировать коммитом.

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

# Отменить незакоммиченные изменения в файле
git restore -- path/to/file.php

# Убрать файл из индекса, сохранив его изменения
git restore --staged -- path/to/file.php

# Добавить забытый файл в последний локальный коммит
git add -- forgotten-file.php
git commit --amend --no-edit

# Отменить опубликованный коммит новым обратным коммитом
git revert <commit-hash>

# Отменить последний локальный коммит, сохранив изменения в индексе
git reset --soft HEAD~1

Осторожно: git restore без --staged удаляет незакоммиченные изменения выбранного файла. Сначала проверьте их через git diff.

Для общей ветки обычно безопаснее git revert, потому что команда не переписывает опубликованную историю. git reset лучше оставлять для локальных коммитов, которые ещё не отправлены.

Команда git reset --hard удаляет локальные изменения в отслеживаемых файлах. Не используйте её как универсальный способ «починить Git».

История изменений

# Компактная история с ветками
git log --oneline --graph --decorate --all

# Последние пять коммитов
git log -5 --oneline

# История конкретного файла
git log --follow -- path/to/file.php

# Посмотреть последний коммит
git show --stat

# Найти коммиты, в которых менялась строка
git log -S "SearchText" --oneline

Безопасность и .gitignore

Не добавляйте в Git пароли, токены, приватные ключи, содержимое .env, рабочие дампы и резервные копии.

# Пример .gitignore
.env
.env.*
!.env.example

/vendor/
/node_modules/

/var/cache/
/var/log/

*.sql
*.zip
*.key
*.pem

.gitignore не перестаёт отслеживать файл, который уже был добавлен в репозиторий. Такой файл можно убрать из будущих коммитов, сохранив на диске:

git rm --cached -- .env
git commit -m "Удалён .env из репозитория"

Если пароль или токен уже попал в коммит, одного удаления файла недостаточно. Секрет нужно немедленно заменить, а затем при необходимости очистить историю репозитория.

Краевые случаи

  • Ветка не переключается: сохраните изменения коммитом или через git stash.
  • git pull --ff-only завершился ошибкой: выполните git fetch, посмотрите историю и выберите merge или rebase.
  • Файл неожиданно игнорируется: выполните git check-ignore -v -- path/to/file.
  • Коммит сделан не в той ветке: создайте новую ветку от текущего коммита, чтобы не потерять работу.
  • Репозиторий быстро растёт: не храните зависимости, сборки, архивы и дампы. Для необходимых крупных бинарных файлов используйте Git LFS.

Совместимость и проверка результата

Команды работают в Linux, macOS, Git Bash и PowerShell. При использовании масок заключайте их в кавычки, например git add -- '*.php', чтобы результат не зависел от командной оболочки.

# Рабочее дерево должно быть чистым
git status

# Проверить текущую ветку и upstream
git branch -vv

# Проверить последний коммит
git log -1 --oneline

# Проверить адрес удалённого репозитория
git remote -v

Ожидаемый результат: нет незакоммиченных изменений, выбрана правильная ветка, последний коммит содержит нужную работу, а origin указывает на правильный репозиторий.

Альтернативы

Для просмотра истории и разрешения сложных конфликтов можно использовать встроенные инструменты IDE или графические клиенты Git. Однако базовые команды терминала полезно знать: они одинаково работают локально, на сервере и в автоматизированных сценариях.

Официальная документация

Справку по установленной версии Git можно получить прямо в терминале:

# Полная документация по команде
git help <command>

# Краткий список параметров
git <command> -h

# Примеры
git help commit
git switch -h
up: Просмотров: 812
Материал помог? Оценка помогает находить устаревшие и спорные решения.

Комментарии

1

Нашли ошибку или хотите дополнить материал?

Комментарий удалён

Текст комментария удалён автором.

Telegram