Полный гайд-шпаргалка по Git: от основ до эффективной работы
-
Git — это распределенная система контроля версий, которая позволяет отслеживать изменения в файлах и работать над проектом совместно с другими разработчиками.
Ключевые понятия:
Репозиторий — хранилище вашего проекта с историей измененийКоммит — фиксация изменений в репозитории с уникальным идентификатором
Ветка — отдельная линия разработки
Рабочая область — файлы, с которыми вы работаете локальноИндекс (staging area) — область подготовки изменений к коммиту
Настройка Git
# Установка имени пользователя и email git config --global user.name "Ваше Имя" git config --global user.email "ваш@email.com" # Установка редактора по умолчанию git config --global core.editor "code --wait" # Цветной вывод git config --global color.ui auto # Просмотр настроек git config --list
Основные команды для начала работы
Создание репозитория
# Инициализация нового репозитория git init # Клонирование существующего репозитория git clone https://github.com/username/repository.git
Состояние репозитория
# Проверка статуса git status # Краткий статус git status -s
Рабочий процесс: добавление и коммиты
Добавление файлов в индекс
# Добавить конкретный файл git add index.html # Добавить все измененные файлы git add . # Добавить все файлы с расширением .js git add *.js # Интерактивное добавление git add -p
Создание коммитов
# Коммит с сообщением git commit -m "Добавлена главная страница" # Коммит с открытием редактора для сообщения git commit # Добавить изменения и сделать коммит (только для отслеживаемых файлов) git commit -am "Сообщение коммита" # Исправление последнего коммита git commit --amend
Просмотр истории и изменений
# Просмотр истории коммитов git log # Компактный вывод истории git log --oneline # Графическое представление веток git log --oneline --graph --all # Просмотр изменений в файлах git diff # Просмотр изменений в индексе git diff --staged # Показ изменений в конкретном коммите git show <хэш_коммита>
Работа с ветками
Создание и переключение веток
# Создание новой ветки git branch feature-branch # Переключение на ветку git checkout feature-branch # Создание и переключение на новую ветку git checkout -b new-feature # Просмотр всех веток git branch -a # Удаление ветки git branch -d branch-name
Слияние веток
# Переключиться на ветку, в которую хотите влить изменения git checkout main # Влить изменения из feature-branch в main git merge feature-branch
Разрешение конфликтов
При конфликте слияния:
- Git покажет конфликтующие файлы
- Отредактируйте файлы, оставив нужные изменения
- Добавьте исправленные файлы в индекс:
git add .
- Завершите слияние:
git commit
Работа с удаленными репозиториями
Подключение и синхронизация
# Добавление удаленного репозитория git remote add origin https://github.com/user/repo.git # Просмотр удаленных репозиториев git remote -v # Загрузка изменений с удаленного репозитория git fetch origin # Скачивание изменений и слияние с текущей веткой git pull origin main # Отправка изменений на удаленный репозиторий git push origin main # Отправка ветки на удаленный репозиторий git push -u origin feature-branch
Отмена изменений
Отмена в рабочей области
# Отмена изменений в конкретном файле git checkout -- filename.txt # Отмена всех изменений в рабочей области git checkout -- .
Отмена в индексе
# Удаление файла из индекса (но сохранение изменений) git reset HEAD filename.txt
Отмена коммитов
# Отмена последнего коммита (сохраняет изменения в рабочей области) git reset --soft HEAD~1 # Отмена последнего коммита (удаляет изменения) git reset --hard HEAD~1 # Отмена до определенного коммита git reset --hard <хэш_коммита>
Полезные техники и команды
Stash — временное сохранение изменений
# Сохранить текущие изменения git stash # Посмотреть список stash git stash list # Вернуть сохраненные изменения git stash pop # Удалить stash git stash drop
Поиск в истории
# Поиск коммитов по сообщению git log --grep="исправление" # Поиск изменений, содержащих строку git log -S"function_name"
Работа с тегами
# Создание легковесного тега git tag v1.0 # Создание аннотированного тега git tag -a v1.1 -m "Версия 1.1" # Отправка тегов на удаленный репозиторий git push origin --tags
Продвинутые возможности
Перебазирование (rebase)
# Перебазирование текущей ветки на main git rebase main # Интерактивное перебазирование git rebase -i HEAD~3
Временное игнорирование изменений в файле
# Игнорировать изменения в файле (удобно для конфигов) git update-index --assume-unchanged config.json # Снова отслеживать изменения git update-index --no-assume-unchanged config.json
Практические советы по использованию Git
Как писать хорошие сообщения коммитов:
- Краткое описание (до 50 символов) — что сделано?
- Подробное описание (если нужно) — почему и как сделано?
- Используйте повелительное наклонение: “Добавить”, “Исправить”, “Обновить”
Пример хорошего сообщения:
Добавить аутентификацию пользователя - Реализована JWT-аутентификация - Добавлены middleware для проверки токена - Обновлены модели пользователей
Стратегия ветвления:
main/master — стабильная версия, готовая к productiondevelop
— основная ветка для разработкиfeature/*
— ветки для новых функциональностейhotfix/*
— срочные исправления для productionrelease/*
— подготовка к выпуску версии
Эффективная работа:
- Часто делайте коммиты (каждый логический этап)
- Перед pull request делайте rebase на основную ветку
- Используйте
.gitignore
для исключения ненужных файлов - Регулярно синхронизируйтесь с удаленным репозиторием
Полезные алиасы для .gitconfig
Добавьте в ваш .gitconfig в секцию [alias]:
[alias] co = checkout br = branch ci = commit st = status last = log -1 HEAD graph = log --oneline --graph --all unstage = reset HEAD --
Решение распространенных проблем
“Я сделал коммит не в ту ветку”
# Создать новую ветку из текущего состояния git branch new-feature # Переключиться на правильную ветку git checkout correct-branch # Перенести коммит (через reset или cherry-pick) git reset --hard HEAD~1 # отменить коммит git checkout correct-branch git cherry-pick <хэш_коммита>
“Я забыл добавить файл в последний коммит”
# Добавить забытый файл git add forgotten-file.txt # Исправить последний коммит git commit --amend
-
Алиас hist для удобного просмотра истории Git
Для более информативного вывода создайте расширенный алиас:
git config --global alias.hist "log --all --graph --pretty=format:'%C(yellow)%h%Creset %ad | %s%d %Cgreen[%an]%Creset' --date=short"
Этот алиас покажет:
- Желтый хэш коммита
- Дату коммита
- Сообщение коммита и ссылки (ветки, теги)
- Зеленое имя автора
Пример вывода
* 5a4b3c2 2023-10-15 | Добавить аутентификацию пользователя (HEAD -> main) [Иван Петров] * 1d2e3f4 2023-10-14 | Merge branch 'feature/api' [Мария Сидорова] |\ | * a1b2c3d 2023-10-13 | Реализовать API endpoints (origin/feature/api) [Алексей Иванов] | * d4e5f6a 2023-10-12 | Добавить модели данных [Алексей Иванов] |/ * 7e8f9g0 2023-10-11 | Инициализация проекта [Иван Петров]
Дополнительные полезные алиасы для истории
# Подробная история git config --global alias.hist-detailed "log --all --graph --pretty=format:'%C(yellow)%h%Creset %ad | %s%d %Cgreen[%an]%Creset%n%b' --date=short" # История с статистикой изменений git config --global alias.hist-stat "log --all --graph --pretty=format:'%C(yellow)%h%Creset %ad | %s%d %Cgreen[%an]%Creset' --date=short --stat" # История за последние 7 дней git config --global alias.hist-week "log --all --since='7 days ago' --oneline --graph"
-
Git Fetch
Что делает:
- Загружает изменения из удаленного репозитория в ваш локальный
- Не изменяет ваши рабочие файлы или текущую ветку
- Обновляет удаленные ссылки (origin/main, origin/develop и т.д.)
Основные команды:
# Получить все изменения из всех удаленных репозиториев git fetch # Получить изменения из конкретного удаленного репозитория git fetch origin # Получить изменения для конкретной ветки git fetch origin main # Получить изменения и очистить устаревшие ветки git fetch --prune
Зачем использовать:
- Увидеть изменения перед интеграцией
- Обновить информацию о удаленных ветках
- Безопасно проверить чужие изменения перед слиянием
Типичный workflow:
git fetch
- получить измененияgit diff origin/main
- посмотреть что изменилосьgit merge origin/main
- влить изменения
Git Fetch .
Что делает:
- Использует текущий репозиторий как источник для обновления ссылок
- Позволяет манипулировать ветками без сетевого взаимодействия
Основные команды:
# Обновить ветку на основе текущего состояния git fetch . main:feature-branch # Принудительное обновление ветки (осторожно!) git fetch . main:feature-branch --force
Зачем использовать:
- Быстрое создание/обновление веток без переключения
- Синхронизация удаленных ссылок с локальным состоянием
- Создание резервных копий перед рискованными операциями
Отличие от обычного fetch:
- Работает только с локальным репозиторием
- Не требует сетевого подключения
- Может перезаписывать историю (с флагом --force)
Безопасное использование
Обычный fetch — безопасен, рекомендуется для повседневного использования
Fetch с точкой — продвинутая команда, используйте с осторожностью:
- Всегда проверяйте состояние перед использованием
- Создавайте резервные копии веток
- Избегайте --force без крайней необходимости
Для большинства задач обычный
git fetch
вполне достаточен.git fetch .
— это специализированный инструмент
© 2024 - 2025 ExLends, Inc. Все права защищены.