Системы контроля версий — это инструменты, которые управляют изменениями, внесенными в файлы и каталоги в проекте. Они позволяют вам отслеживать, что и когда вы делали, отменять любые изменения, которые, по вашему мнению, вам не нужны, и сотрудничать с другими. Эта шпаргалка посвящена одной из самых популярных систем — 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
- Загрузите последнюю версию установщика для Windows
- Следуйте инструкциям по установке
Настройка 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
Отменить один коммит, не изменяя последующие коммиты (безопасный сброс)
git revert [id_комита]