Шпаргалка по Git
Настройка Git
// Установить имя пользователя
git config --global user.name "Ваше Имя"
// Установить email
git config --global user.email "example@email.com"
// Проверить текущую конфигурацию
git config --list
Начало работы
// Создание нового репозитория
git init
// Клонирование удалённого репозитория
git clone <URL репозитория>
Основные команды
// Проверить состояние репозитория (новые/изменённые файлы)
git status
// Добавить файлы в индекс (staging area)
git add <имя файла или .>
// Зафиксировать (commit) изменения
git commit -m "Комментарий к коммиту"
// Посмотреть историю коммитов
git log
// Краткая история:
git log --oneline --graph --decorate --all
// Отправить изменения на удалённый репозиторий
git push
// Получить изменения из удалённого репозитория
git pull
Работа с ветками
// Создать новую ветку и переключиться на неё
git checkout -b <имя_ветки>
// Переключиться на существующую ветку
git checkout <имя_ветки>
// Посмотреть список локальных веток
git branch
// Удалить ветку локально
git branch -d <имя_ветки>
// Слияние ветки в текущую
git merge <имя_ветки>
Совет:
Перед merge
или rebase
убедитесь, что у вас нет незакоммиченных изменений, чтобы избежать конфликтов.
Git Merge vs Git Rebase
// Слияние (merge)
// merge создаёт merge-коммит и сохраняет историю ветвления.
git checkout main
git merge feature
// Перезапись истории (rebase)
// rebase «переписывает» коммиты поверх другой ветки, создавая линейную историю.
git checkout feature
git rebase main
Git Merge
- Сохранение истории: При слиянии с помощью git merge сохраняется история обеих веток. Это означает, что видны все развилки и слияния в графе коммитов.
- Merge commit: Создаётся дополнительный коммит слияния, который объединяет историю веток.
- Безопасность: Merge не изменяет уже существующую историю, что особенно важно при работе с публичными ветками, где несколько разработчиков могут работать над одной веткой.
Git Rebase
- Линейная история: git rebase переписывает историю, перемещая коммиты одной ветки на конец другой. Это приводит к более чистой, линейной истории без merge commit-ов.
- Изменение истории: Rebase изменяет историю коммитов, что может привести к конфликтам, если изменения уже опубликованы и используются другими разработчиками.
- Удобство при подготовке: Часто используется для "подчистки" истории перед объединением веток (например, перед отправкой pull request), чтобы избежать большого количества merge коммитов.
Работа с удалёнными репозиториями
// Добавить новый удалённый репозиторий
git remote add <имя> <URL>
// Просмотреть список удалённых репозиториев
git remote -v
// Забрать изменения c удалённого репозитория (без слияния)
git fetch <имя_репо>
// Слияние изменений после fetch
git merge <имя_ветки>
Отмена изменений
// Отмена изменений в рабочей области (до коммита)
git checkout -- <имя файла>
// Убрать файл из индекса (но оставить изменения в рабочей области)
git reset <имя файла>
// «Откатить» (reset) ветку к определённому коммиту
git reset --hard <хеш_коммита>
Предупреждение:
Команда git reset --hard
безвозвратно удаляет изменения, которые не закоммичены и не сохранены в других ветках.
Работа с тегами (tags)
// Создать легковесный тег
git tag v1.0
// Создать аннотированный тег
git tag -a v1.0 -m "Версия 1.0"
// Просмотреть список тегов
git tag
// Отправить теги на удалённый репозиторий
git push --tags
Сравнение и поиск
// Посмотреть разницу между рабочей директорией и индексом
git diff
// Посмотреть разницу между индексом и последним коммитом
git diff --staged
// Посмотреть изменения между двумя коммитами
git diff <коммит1> <коммит2>
// Поиск коммита по сообщению/автору:
git log --grep="поиск в комментариях"
git log --author="Имя"
Git Stash
Если нужно срочно переключиться на другую ветку, но есть незакоммиченные изменения:
// Сохранить изменения во временном хранилище
git stash
// Просмотреть список «стэшей»
git stash list
// Восстановить последний stash
git stash pop