Системы контроля версий — это инструменты, которые управляют изменениями, внесенными в файлы и каталоги в проекте. Они позволяют вам отслеживать, что и когда вы делали, отменять любые изменения, которые, по вашему мнению, вам не нужны, и сотрудничать с другими. Эта шпаргалка посвящена одной из самых популярных систем — Git.

Навигация по статье

Основные определения

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

  • Локальный репозиторий — каталог на вашем компьютере (или сервере), содержащий папки и файлы проекта
  • Удаленный репозиторий — онлайн-версия локального репозитория, размещенная на таких сервисах, как GitHub, GitLab и BitBucket
  • Клонирование — команда для создания копии репозитория в новом каталоге
  • Коммит (commit) — моментальный снимок проекта, к которому вы можете вернуться
  • Ветвь (branch) — копия проекта, используемая для работы в изолированной среде, не затрагивающая основной проект
  • Git merge — процесс объединения двух веток вместе
  • gitignore — файл со списком других файлов, которые вы не хотите отслеживать с помощью git (например, папки с большими данными, личная информация и любые локальные файлы, которые не должны быть видны публике)
  • Промежуточная область — кеш, в котором хранятся изменения, которые вы хотите зафиксировать в следующий раз
  • Git stash — еще один тип кеша, который содержит нежелательные изменения, к которым вы, возможно, захотите вернуться позже
  • Идентификатор фиксации или хэш — уникальный идентификатор для каждой фиксации, используемый для переключения на разные точки сохранения
  • HEAD (всегда заглавные буквы) — ссылочное имя для последней фиксации, чтобы вам не приходилось вводить идентификаторы фиксации. HEAD используется для ссылки на более старые фиксации (например HEAD~2, относится к предпоследней фиксации).

Установка и настройка GIT

В Linux

Установите пакет git

sudo apt-get install git

В Windows

  1. Загрузите последнюю версию установщика для Windows
  2. Следуйте инструкциям по установке

Настройка Git

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

Все команды вводятся в терминале. В Linux никуда заходить не нужно, вводим прямо с консоли. В Windows открываем Пуск -> Git Bash.

Настройте свою электронную почту

git config --global user.email "your-email@domain.ru"

Введите свое имя

git config --global user.name "your-name"

Основные команды Git

Что такое репозиторий?

Репозиторий или репозиторий — это любое место, где хранится код и необходимые файлы, позволяющие ему работать без ошибок. Репозиторий может быть как локальным, так и удаленным. Локальный репозиторий обычно представляет собой каталог на вашем компьютере, а удаленный репозиторий размещается на таких серверах, как GitHub.

Что такое ветка?

Ветки — это специальные «копии» кодовой базы, которые позволяют вам работать над разными частями проекта и новыми функциями в изолированной среде. Изменения, внесенные в файлы в ветке, не повлияют на «основную ветку», которая является основным каналом разработки проекта.

Создание локальных репозиториев

Клонировать репозиторий с удаленных хостов (GitHub, GitLab, DagsHub и т. д.)

git clone <url_репозитория>

Инициализировать отслеживание git внутри текущего каталога

git init

Клонировать только определенную ветку

git clone -branch <имя_ветки> <url_репозитория>

Клонирование в указанный каталог

git clone <url_репозитория> <имя_директории>

Существует два основных метода клонирования репозитория — синтаксис HTTPS и синтаксис SSH. Хотя клонирование SSH обычно считается немного более безопасным, поскольку для аутентификации необходимо использовать ключ SSH, клонирование HTTPS намного проще и является рекомендуемым вариантом клонирования GitHub.

HTTPS

git clone https://github.com/your_username/repo_name.git

SSH

git clone git@github.com:user_name/repo_name.git

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

Список удаленных репозиториев

git remote

Устанавливаем соединение с удаленным репозиторием

git remote add <имя_подключения> <url_репозитория>

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

git remote rm <имя_подключения>

Переименовать удаленное соединение

git remote rename <старое_имя> <новое_имя>

Работа с файлами

Добавление и удаление файлов

Добавить файл или каталог в git для отслеживания

git add <имя_файла_или_директории>

Добавить все файлы в текущем каталоге в git

git add .

Удалить файл из рабочего каталога

git rm <имя_директории>

Сохранения и работа с изменениями

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

git status

Сделать снимок изменения (коммит) с комментарием

git commit -m "комментарий"

Ветвление

Список всех веток

git branch
git branch --list
git branch -a

Создать новую локальную ветку

git branch <имя_ветки>

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

git checkout <имя_ветки>

Создать новую локальную ветку и переключиться на нее

git checkout -b <имя_ветки>

Безопасное удаление локальной ветки (предотвращает удаление неслитых изменений)

git branch -d <имя_ветки>

Принудительно удалить локальную ветку (независимо от того, объединена она или нет)

git branch -D <имя_ветки>

Переименовать текущую ветку

git branch -m <новое_имя>

Отправить копию локальной ветки в удаленный репозиторий

git push <url репозитория> <имя_ветки~>

Удалить ветку в удаленном репозитории (прежде удаляем ветку локально: тег -d работает только локально)

git push <url_репозитория>:<имя_ветки>
git push <url_репозитория> --delete <имя_ветки>

Слияние ветки с основной веткой

git checkout main
git merge <сливаемая_ветка>

Различия между двумя ветками

git diff <ветка_1> <ветка_2>

Работа с удаленным репозиторием

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

git fetch <url_репозитория>

Загрузить только указанную ветку из репозитория

git fetch <url_репозитория> <ветка>

Объединить полученные изменения

git merge <remote>/<branch>

Более агрессивная версия fetch, которая одновременно вызывает fetch и merge

git pull <url_репозитория>

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

Проверка (переключение) на старые коммиты

git checkout HEAD~3

Отменить последний коммит, но оставить рабочий каталог без изменений

git reset HEAD~1

Вы можете отменить любое количество коммитов, изменив число после тильды.

Отменить все изменения последней фиксации

git reset --hard HEAD~1

Вместо HEAD~n вы также можете указать хэш коммита. Изменения после этой фиксации будут уничтожены.

Отменить один коммит, не изменяя последующие коммиты (безопасный сброс)

git revert [id_комита]

Может привести к конфликтам возврата