Весной стартует сезон найма, успей отхватить свой оффер!

Шпаргалка по 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