Git Справочник

Изучите Git с практическими лабораториями

Изучите систему контроля версий Git с помощью практических лабораторных работ и сценариев из реального мира. LabEx предлагает комплексные курсы по Git, охватывающие основные команды, стратегии ветвления, рабочие процессы совместной работы и продвинутые методы. Научитесь управлять репозиториями кода, разрешать конфликты и эффективно работать с командами, используя Git и GitHub.

Настройка и Конфигурация Репозитория

Инициализация Репозитория: git init

Создает новый репозиторий Git в текущем каталоге.

# Инициализировать новый репозиторий
git init
# Инициализировать в новом каталоге
git init project-name
# Инициализировать "голый" репозиторий (без рабочей директории)
git init --bare
# Использовать пользовательский каталог шаблонов
git init --template=path

Клонирование Репозитория: git clone

Создает локальную копию удаленного репозитория.

# Клонировать через HTTPS
git clone https://github.com/user/repo.git
# Клонировать через SSH
git clone git@github.com:user/repo.git
# Клонировать с пользовательским именем
git clone repo.git local-name
# Неполное клонирование (только последний коммит)
git clone --depth 1 repo.git

Глобальная Конфигурация: git config

Настройка информации о пользователе и предпочтений глобально.

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main
# Просмотреть все настройки конфигурации
git config --list

Локальная Конфигурация: git config --local

Установка конфигурации, специфичной для репозитория.

# Установить только для текущего репозитория
git config user.name "Project Name"
# Электронная почта для проекта
git config user.email "project@example.com"

Управление Удаленными Репозиториями: git remote

Управление подключениями к удаленным репозиториям.

# Добавить удаленный репозиторий
git remote add origin https://github.com/user/repo.git
# Вывести список всех удаленных репозиториев с URL
git remote -v
# Показать подробную информацию об удаленном репозитории
git remote show origin
# Переименовать удаленный репозиторий
git remote rename origin upstream
# Удалить удаленный репозиторий
git remote remove upstream

Хранение Учетных Данных: git config credential

Сохранение учетных данных аутентификации для избежания повторного входа.

# Кэшировать на 15 минут
git config --global credential.helper cache
# Сохранить на постоянной основе
git config --global credential.helper store
# Кэшировать на 1 час
git config --global credential.helper 'cache --timeout=3600'

Информация о Репозитории и Статус

Проверка Статуса: git status

Отображает текущее состояние рабочей директории и области проиндексированных изменений (staging area).

# Полная информация о статусе
git status
# Короткий формат статуса
git status -s
# Формат, пригодный для машинной обработки
git status --porcelain
# Также показывать игнорируемые файлы
git status --ignored

Просмотр Различий: git diff

Показывает изменения между различными состояниями вашего репозитория.

# Изменения в рабочей директории по сравнению с областью проиндексированных изменений
git diff
# Изменения в области проиндексированных изменений по сравнению с последним коммитом
git diff --staged
# Все незафиксированные изменения
git diff HEAD
# Изменения в конкретном файле
git diff file.txt

Просмотр Истории: git log

Отображает историю коммитов и временную шкалу репозитория.

# Полная история коммитов
git log
# Сжатый однострочный формат
git log --oneline
# Показать последние 5 коммитов
git log -5
# Визуальный граф ветвей
git log --graph --all

Индексация и Фиксация Изменений

Индексация Файлов: git add

Добавляет изменения в область проиндексированных изменений для следующего коммита.

# Индексировать конкретный файл
git add file.txt
# Индексировать все изменения в текущем каталоге
git add .
# Индексировать все изменения (включая удаления)
git add -A
# Индексировать все JavaScript файлы
git add *.js
# Интерактивная индексация (режим патча)
git add -p

Фиксация Изменений: git commit

Сохраняет проиндексированные изменения в репозитории с описательным сообщением.

# Коммит с сообщением
git commit -m "Add user authentication"
# Индексировать и зафиксировать измененные файлы
git commit -a -m "Update docs"
# Изменить последний коммит
git commit --amend
# Изменить без изменения сообщения
git commit --no-edit --amend
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает git commit -m "message"?
Создает новый коммит с указанным сообщением
Индексирует все изменения в рабочей директории
Отправляет изменения в удаленный репозиторий
Создает новую ветку

Отмена Индексации Файлов: git reset

Удаляет файлы из области проиндексированных изменений или отменяет коммиты.

# Отменить индексацию конкретного файла
git reset file.txt
# Отменить индексацию всех файлов
git reset
# Отменить последний коммит, сохранив изменения проиндексированными
git reset --soft HEAD~1
# Отменить последний коммит, отбросив изменения
git reset --hard HEAD~1

Отбрасывание Изменений: git checkout / git restore

Возвращает изменения в рабочей директории к состоянию последнего коммита.

# Отбросить изменения в файле (старый синтаксис)
git checkout -- file.txt
# Отбросить изменения в файле (новый синтаксис)
git restore file.txt
# Отменить индексацию файла (новый синтаксис)
git restore --staged file.txt
# Отбросить все незафиксированные изменения
git checkout .

Операции с Ветками

Список Ветвей: git branch

Просмотр и управление ветвями репозитория.

# Вывести список локальных веток
git branch
# Вывести список всех веток (локальных и удаленных)
git branch -a
# Вывести список только удаленных веток
git branch -r
# Показать последний коммит в каждой ветке
git branch -v

Создание и Переключение: git checkout / git switch

Создание новых веток и переключение между ними.

# Создать новую ветку и переключиться на нее
git checkout -b feature-branch
# Создать и переключиться (новый синтаксис)
git switch -c feature-branch
# Переключиться на существующую ветку
git checkout main
# Переключиться на существующую ветку (новый синтаксис)
git switch main
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает git checkout -b feature-branch?
Удаляет ветку feature-branch
Создает новую ветку с именем feature-branch и переключается на нее
Объединяет feature-branch с текущей веткой
Показывает историю коммитов feature-branch

Слияние Ветвей: git merge

Объединение изменений из разных веток.

# Объединить feature-branch с текущей веткой
git merge feature-branch
# Принудительное слияние с созданием коммита
git merge --no-ff feature-branch
# Сжать коммиты перед слиянием
git merge --squash feature-branch

Удаление Ветвей: git branch -d

Удаление веток, которые больше не нужны.

# Удалить объединенную ветку
git branch -d feature-branch
# Принудительное удаление необъединенной ветки
git branch -D feature-branch
# Удалить удаленную ветку
git push origin --delete feature-branch

Операции с Удаленным Репозиторием

Получение Обновлений: git fetch

Загружает изменения из удаленного репозитория без слияния.

# Получить изменения из удаленного репозитория по умолчанию
git fetch
# Получить изменения из конкретного удаленного репозитория
git fetch origin
# Получить изменения из всех удаленных репозиториев
git fetch --all
# Получить конкретную ветку
git fetch origin main

Загрузка Изменений: git pull

Загружает и объединяет изменения из удаленного репозитория.

# Загрузить из отслеживаемой ветки
git pull
# Загрузить из конкретной удаленной ветки
git pull origin main
# Загрузить с использованием rebase вместо merge
git pull --rebase
# Только fast-forward, без коммитов слияния
git pull --ff-only
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

В чем разница между git fetch и git pull?
Разницы нет; они делают одно и то же
git fetch отправляет изменения, git pull загружает изменения
git fetch загружает изменения без слияния, git pull загружает и объединяет изменения
git fetch работает с локальными репозиториями, git pull работает с удаленными

Отправка Изменений: git push

Загружает локальные коммиты в удаленный репозиторий.

# Отправить в отслеживаемую ветку
git push
# Отправить в конкретную удаленную ветку
git push origin main
# Отправить и установить отслеживание (upstream)
git push -u origin feature
# Принудительная отправка с безопасной проверкой
git push --force-with-lease
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает git push -u origin feature?
Удаляет ветку feature из удаленного репозитория
Загружает изменения из ветки feature
Объединяет ветку feature с main
Отправляет ветку feature в origin и настраивает отслеживание

Отслеживание Удаленных Ветвей: git branch --track

Настройка отслеживания между локальными и удаленными ветвями.

# Установить отслеживание
git branch --set-upstream-to=origin/main main
# Отслеживать удаленную ветку
git checkout -b local-branch origin/remote-branch

Стейшинг и Временное Хранение

Стейшинг Изменений: git stash

Временно сохраняет незафиксированные изменения для последующего использования.

# Стейшинг текущих изменений
git stash
# Стейшинг с сообщением
git stash save "Work in progress on feature X"
# Включая неотслеживаемые файлы
git stash -u
# Стейшинг только не проиндексированных изменений
git stash --keep-index

Список Стейшей: git stash list

Просмотр всех сохраненных стейшей.

# Показать все стейши
git stash list
# Показать изменения в последнем стейше
git stash show
# Показать изменения в конкретном стейше
git stash show stash@{1}

Применение Стейшей: git stash apply

Восстановление ранее сохраненных изменений.

# Применить последний стейш
git stash apply
# Применить конкретный стейш
git stash apply stash@{1}
# Применить и удалить последний стейш
git stash pop
# Удалить последний стейш
git stash drop
# Создать ветку из стейша
git stash branch new-branch stash@{1}
# Удалить все стейши
git stash clear
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

В чем разница между git stash apply и git stash pop?
git stash apply удаляет стейш, git stash pop оставляет его
git stash apply оставляет стейш, git stash pop удаляет его после применения
git stash apply работает с удаленными репозиториями, git stash pop работает локально
Разницы нет; они делают одно и то же

Анализ Истории и Лога

Просмотр Истории Коммитов: git log

Исследование истории репозитория с различными опциями форматирования.

# Визуальная история ветвей
git log --oneline --graph --all
# Коммиты от конкретного автора
git log --author="John Doe"
# Недавние коммиты
git log --since="2 weeks ago"
# Поиск по сообщениям коммитов
git log --grep="bug fix"

Аннотация и Авторство: git blame

Показывает, кто и когда изменил каждую строку файла.

# Показать авторство построчно
git blame file.txt
# Аннотация конкретных строк
git blame -L 10,20 file.txt
# Альтернатива blame
git annotate file.txt

Поиск по Репозиторию: git grep

Поиск текстовых шаблонов по истории репозитория.

# Поиск текста в отслеживаемых файлах
git grep "function"
# Поиск с номерами строк
git grep -n "TODO"
# Поиск в проиндексированных файлах
git grep --cached "bug"

Детали Коммита: git show

Отображение подробной информации о конкретных коммитах.

# Показать детали последнего коммита
git show
# Показать предыдущий коммит
git show HEAD~1
# Показать конкретный коммит по хешу
git show abc123
# Показать коммит со статистикой по файлам
git show --stat

Отмена Изменений и Редактирование Истории

Отмена Коммитов: git revert

Создает новые коммиты, которые безопасно отменяют предыдущие изменения.

# Отменить последний коммит
git revert HEAD
# Отменить конкретный коммит
git revert abc123
# Отменить диапазон коммитов
git revert HEAD~3..HEAD
# Отменить без автоматического создания коммита
git revert --no-commit abc123

Сброс Истории: git reset

Перемещает указатель ветки и, при необходимости, изменяет рабочую директорию.

# Отменить коммит, сохранив изменения проиндексированными
git reset --soft HEAD~1
# Отменить коммит и индексацию
git reset --mixed HEAD~1
# Отменить коммит, индексацию и рабочую директорию
git reset --hard HEAD~1

Интерактивный Rebase: git rebase -i

Интерактивное редактирование, переупорядочивание или сжатие коммитов.

# Интерактивный rebase последних 3 коммитов
git rebase -i HEAD~3
# Rebase текущей ветки на main
git rebase -i main
# Продолжить после разрешения конфликтов
git rebase --continue
# Отменить операцию rebase
git rebase --abort

Cherry-pick: git cherry-pick

Применение конкретных коммитов из других веток.

# Применить конкретный коммит к текущей ветке
git cherry-pick abc123
# Применить диапазон коммитов
git cherry-pick abc123..def456
# Cherry-pick без создания коммита
git cherry-pick -n abc123

Разрешение Конфликтов

Конфликты Слияния: Процесс Разрешения

Шаги для разрешения конфликтов во время операций слияния.

# Проверить конфликтные файлы
git status
# Отметить конфликт как разрешенный
git add resolved-file.txt
# Завершить слияние
git commit
# Отменить слияние и вернуться к предыдущему состоянию
git merge --abort

Инструменты Слияния: git mergetool

Запуск внешних инструментов для визуального разрешения конфликтов.

# Запустить инструмент слияния по умолчанию
git mergetool
# Установить инструмент слияния по умолчанию
git config --global merge.tool vimdiff
# Использовать конкретный инструмент для этого слияния
git mergetool --tool=meld

Маркеры Конфликтов: Понимание Формата

Интерпретация маркеров конфликтов Git в файлах.

<<<<<<< HEAD
Содержимое текущей ветки
=======
Содержимое входящей ветки
>>>>>>> feature-branch

После редактирования файла для разрешения:

git add conflicted-file.txt
git commit

Инструменты Diff: git difftool

Использование внешних инструментов diff для лучшей визуализации конфликтов.

# Запустить инструмент diff для изменений
git difftool
# Установить инструмент diff по умолчанию
git config --global diff.tool vimdiff

Тегирование и Релизы

Создание Тегов: git tag

Пометка конкретных коммитов метками версий.

# Создать легковесный тег
git tag v1.0
# Создать аннотированный тег
git tag -a v1.0 -m "Version 1.0 release"
# Тегировать конкретный коммит
git tag -a v1.0 abc123
# Создать подписанный тег
git tag -s v1.0

Список и Просмотр Тегов: git tag -l

Просмотр существующих тегов и их информации.

# Вывести список всех тегов
git tag
# Вывести список тегов, соответствующих шаблону
git tag -l "v1.*"
# Показать детали тега
git show v1.0

Отправка Тегов: git push --tags

Отправка тегов в удаленные репозитории.

# Отправить конкретный тег
git push origin v1.0
# Отправить все теги
git push --tags
# Отправить все теги в конкретный удаленный репозиторий
git push origin --tags

Удаление Тегов: git tag -d

Удаление тегов из локальных и удаленных репозиториев.

# Удалить локальный тег
git tag -d v1.0
# Удалить удаленный тег
git push origin --delete tag v1.0
# Альтернативный синтаксис удаления
git push origin :refs/tags/v1.0

Конфигурация и Псевдонимы Git

Просмотр Конфигурации: git config --list

Отображение текущих настроек конфигурации Git.

# Показать все настройки конфигурации
git config --list
# Показать только глобальные настройки
git config --global --list
# Показать настройки, специфичные для репозитория
git config --local --list
# Показать конкретную настройку
git config user.name

Создание Псевдонимов: git config alias

Настройка ярлыков для часто используемых команд.

# git st = git status
git config --global alias.st status
# git co = git checkout
git config --global alias.co checkout
# git br = git branch
git config --global alias.br branch
# git ci = git commit
git config --global alias.ci commit

Сложные Псевдонимы: Комплексные Команды

Создание псевдонимов для сложных комбинаций команд.

git config --global alias.lg "log --oneline --graph --all"
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"
git config --global alias.visual "!gitk"

Конфигурация Редактора: git config core.editor

Установка предпочтительного текстового редактора для сообщений коммитов и конфликтов.

# VS Code
git config --global core.editor "code --wait"
# Vim
git config --global core.editor "vim"
# Nano
git config --global core.editor "nano"

Производительность и Оптимизация

Обслуживание Репозитория: git gc

Оптимизация производительности и хранения репозитория.

# Стандартная сборка мусора
git gc
# Более тщательная оптимизация
git gc --aggressive
# Запускать только при необходимости
git gc --auto
# Проверить целостность репозитория
git fsck

Обработка Больших Файлов: git lfs

Эффективное управление большими бинарными файлами с помощью Git LFS.

# Установить LFS в репозитории
git lfs install
# Отслеживать PDF-файлы с помощью LFS
git lfs track "*.pdf"
# Показать файлы, отслеживаемые LFS
git lfs ls-files
# Миграция существующих файлов
git lfs migrate import --include="*.zip"

Неполные Клоны: Уменьшение Размера Репозитория

Клонирование репозиториев с ограниченной историей для более быстрых операций.

# Только последний коммит
git clone --depth 1 https://github.com/user/repo.git
# Последние 10 коммитов
git clone --depth 10 repo.git
# Преобразовать неполный клон в полный
git fetch --unshallow

Разреженное Извлечение: Работа с Подкаталогами

Извлечение только определенных частей больших репозиториев.

git config core.sparseCheckout true
echo "src/*" > .git/info/sparse-checkout
# Применить разреженное извлечение
git read-tree -m -u HEAD

Установка и Настройка Git

Менеджеры Пакетов: apt, yum, brew

Установка Git с использованием системных менеджеров пакетов.

# Ubuntu/Debian
sudo apt install git
# CentOS/RHEL
sudo yum install git
# macOS с Homebrew
brew install git
# Windows с winget
winget install Git.Git

Загрузка и Установка: Официальные Установщики

Использование официальных установщиков Git для вашей платформы.

# Загрузить с https://git-scm.com/downloads
# Проверить установку
git --version
# Показать путь к исполняемому файлу git
which git

Настройка При Первом Запуске: Конфигурация Пользователя

Настройка Git с вашей личностью для коммитов.

git config --global user.name "Your Full Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main
# Установить поведение слияния
git config --global pull.rebase false

Рабочие Процессы и Лучшие Практики Git

Рабочий Процесс Ветвей Функций (Feature Branch Workflow)

Стандартный рабочий процесс для разработки функций с изолированными ветвями.

# Начать с ветки main
git checkout main
# Получить последние изменения
git pull origin main
# Создать ветку функции
git checkout -b feature/user-auth
# ... внести изменения и коммиты ...
# Отправить ветку функции
git push -u origin feature/user-auth
# ... создать pull request ...

Git Flow: Структурированная Модель Ветвления

Систематический подход с выделенными ветвями для разных целей.

# Инициализировать Git Flow
git flow init
# Начать работу над функцией
git flow feature start new-feature
# Завершить работу над функцией
git flow feature finish new-feature
# Начать ветку релиза
git flow release start 1.0.0

Соглашения о Сообщениях Коммитов

Следование формату “Conventional Commits” для ясной истории проекта.

# Формат: <тип>(<область>): <тема>
git commit -m "feat(auth): add user login functionality"
git commit -m "fix(api): resolve null pointer exception"
git commit -m "docs(readme): update installation instructions"
git commit -m "refactor(utils): simplify date formatting"

Атомарные Коммиты: Лучшие Практики

Создание сфокусированных, одноцелевых коммитов для лучшей истории.

# Интерактивно индексировать изменения
git add -p
# Конкретное изменение
git commit -m "Add validation to email field"
# Избегать: git commit -m "Fix stuff" # Слишком расплывчато
# Хорошо:  git commit -m "Fix email validation regex pattern"

Устранение Неполадок и Восстановление

Reflog: Инструмент Восстановления

Использование журнала ссылок Git для восстановления потерянных коммитов.

# Показать журнал ссылок
git reflog
# Показать перемещения HEAD
git reflog show HEAD
# Восстановить потерянный коммит
git checkout abc123
# Создать ветку из потерянного коммита
git branch recovery-branch abc123

Поврежденный Репозиторий: Ремонт

Исправление проблем с целостностью репозитория.

# Проверить целостность репозитория
git fsck --full
# Агрессивная очистка
git gc --aggressive --prune=now
# Перестроить индекс при повреждении
rm .git/index; git reset

Проблемы с Аутентификацией

Решение общих проблем с аутентификацией и разрешениями.

# Использовать токен
git remote set-url origin https://token@github.com/user/repo.git
# Добавить SSH ключ в агент
ssh-add ~/.ssh/id_rsa
# Менеджер учетных данных Windows
git config --global credential.helper manager-core

Проблемы с Производительностью: Отладка

Определение и устранение проблем с производительностью репозитория.

# Показать размер репозитория
git count-objects -vH
# Посчитать общее количество коммитов
git log --oneline | wc -l
# Посчитать количество веток
git for-each-ref --format='%(refname:short)' | wc -l

Соответствующие Ссылки