Основы контроля версий в Git: полное руководство

    Команда Simple-Server
    03.06.2026
    12 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    В Git используется контентно-адресуемая система для хранения данных, основанная на адресации по контрольной сумме (она же хеш-сумма). Хеш-сумма выступает в роли уникального идентификатора содержимого пользовательских данных — иными словами, адресом каждого объекта является хеш его содержимого.

    Git осуществляет хранение файлов, используя формат снимков. На практике это выглядит следующим образом: каждый раз, внося изменения, Git фиксирует каждое внесенное изменение в файл и сохраняет ссылку на ранее созданный снимок. Если в файлы не вносились изменения, Git не будет фиксировать их и вместо этого сохранит ссылку на предыдущую версию файла.

    Git оперирует тремя типами объектов: файл , дерево и «коммит» (commit). В объект "файл" вносятся необходимые изменения; дерево — иерархия файлов в репозитории, которая создает связь между директориями и содержащимися в них файлами. Под «коммитом» понимают метод фиксации изменений в файлах.

    В Git используются два типа репозиториев: локальный и удаленный. Локальный репозиторий хранится на устройстве пользователя. Удаленный репозиторий располагается на удаленном устройстве — например на отдельном компьютере. Большинство действий в Git выполняются локально, так как это не централизованная система.

    Git является кроссплатформенным инструментом — поддерживается установка на операционные системы Windows, Linux, macOS. Несмотря на то, что Git традиционно используют в командной строке (что неудивительно, так как инструмент разрабатывался для использования в терминале устройства), существует большое количество разнообразных программ с графической оболочкой под все поддерживаемые операционные системы. Существуют как бесплатные, так и платные программы.

    Для операционных систем Linux/Unix установить Git можно, используя официальные репозитории дистрибутива. Отдельно для Ubuntu создан официальный репозиторий от разработчиков, который предоставляет последнюю актуальную версию Git. Процесс инсталляции Git на различные дистрибутивы Linux описана в инструкции, доступной по ссылке.

    Для пользователей Windows присутствуют разнообразные программы с графическим интерфейсом, включая такие, как GitHub Desktop, Sourcetree, GitKraken Desktop. С полным списком программ для Windows можно ознакомиться по ссылке.

    Для пользователей macOS можно воспользоваться менеджером пакетов Homebrew или MacPorts, а также одной из десятков различных программ с графической оболочкой, включая такие, как GitUp, Gitfox, SnailGit, GitFinder и многие другие. Ознакомиться с инструкцией по установке Git на macOS можно по ссылке.

    Отдельно стоит выделить, что в некоторых IDE, например, VS Code, Xcode, PyCharm, PhpStorm, WebStorm, Git уже предустановлен и его можно использовать “из-коробки”.

    В текущем разделе разберём основы и использование основных функций системы Git, с которыми пользователи сталкиваются чаще всего.

    Предварительная настройка

    Настроим базовые параметры Git, а именно зададим имя пользователя, а также адрес электронной почты. Данная информация будет отображена в каждом коммите для установления личности пользователя. Как правило, без настройки имени и адреса электронной почты нельзя взаимодействовать с Git и его функционалом. Зададим имя пользователя. выполнив в терминале команду (где Alex - это имя пользователя):

    git config --global user.name "Alex"

    Далее зададим адрес электронной почты, используя команду (где alex_mailbox@mail.com - это адрес электронной почты пользователя):

    git config --global user.email alex_mailbox@mail.com

    Если вы не хотите указывать свои настоящие данные, то можно задать любые данные, какие посчитаете нужными.

    Как уже было упомянуто ранее, Git использует объект под названием репозиторий, представляющий собой виртуальное хранилище файлов. Со стороны пользователя репозиторий представляет собой директорию, наподобие той, что используется в операционных системах. В репозитории, помимо хранения файлов, также хранятся объекты Git — коммиты, ветки, история внесенных действий. В Git можно создать как новый репозиторий, так и создать репозиторий из уже существующей папки. Рассмотрим оба варианта на практике.

    Создадим новую директорию:

    mkdir stage-file-for-futher-projeect

    Далее переходим в созданную директорию:

    cd  stage-file-for-futher-projeect

    При выполнении git init в пустой директории команда сообщит о том, что репозиторий был успешно создан, однако он не содержит в себе никаких файлов. При создании нового репозитория в его корне будет создана скрытая папка (папка, имя которой начинается с символа точки) с именем .git. Внутри папки .git расположены конфигурационные файлы Git и структура репозитория:

    Копирование Git-репозитория

    Также присутствует возможность скопировать уже существующий репозиторий. Такие репозитории называются удаленными. Обычно такую возможность используют при работе с такими веб-сервисами, как GitHub и GitLab. Чтобы скопировать удаленный репозиторий, необходимо знать его URL. Для скачивания используют команду git clone. В приведенном примере мы скачаем репозиторий с исходным кодом утилиты curl:

    git clone https://github.com/curl/curl.git

    После скачивания нам будет доступна папка с исходным кодом curl:

    Состояние репозитория Git

    Одной из главных функциональных особенной Git является состояние (или статус) репозитория. Статус используется не только для проверки состояния репозитория, но и для того, чтобы узнать статус индексного раздела. Рассмотрим данную команду, используя репозиторий curl, скачанный ранее. При выполнение команды git status после того, как был скачан репозиторий, в ответ будет выведено сообщение:

    Git сообщил, что в качестве основной ветки в репозитории используется ветка master, которая находится в одинаковом состоянии и синхронизирована с удаленной веткой master.

    Теперь попробуем создать в текущем каталоге curl новый файл:

    После создания файла выведем статус репозитория:

    На скриншоте выше в репозитории появился новый статус, который сообщает о том, что были обнаружены неотслеживаемые изменения. Git сообщил нам об обнаружении нового файла, которого ранее не было в репозитории. Также было выведено сообщение, что Git не будет отслеживать данный файл, пока он не будет добавлен в индексную область Git. Индекс представляет собой область, в которую сохраняются все добавляемые файлы перед тем, как они будут добавлены в репозиторий. Чтобы добавить файл в индекс, воспользуемся командой:

    git add new-test-file.txt

    Статус репозитория был изменен. Проверим:

    Как можно увидеть, у репозитория появился новый статус, означающий добавление в индекс нового файла. Следующим шагом его можно “закоммитить”. Выполним коммит:

    git commit -m "Added new-test-file.txt"

    и убедимся что статус репозитория был также изменен:

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

    Чтобы Git начал отслеживать файлы, находящиеся в рабочем каталоге, их необходимо переместить в индексную область. Для этого используется команда git add. Например, вот так можно добавить один файл:

    Если необходимо добавить все файлы сразу, используется символ точки:

    git add поддерживает работу с символами регулярных выражений.

    Например, чтобы добавить файлы с расширением .txt, необходимо использовать команду:

    Добавленные файлы можно убрать из индекса с помощью:

    Все внесенные изменения в репозиторий, включая добавление файлов, необходимо фиксировать. Это реализуется с помощью команды git commit. С ее помощью можно зафиксировать изменения, внесенные в репозиторий. Также коммиты можно использовать как инструмент для отката, чтобы вернуться на последний или нужный коммит. Выполнить коммит можно только тогда, когда добавлены все файлы.

    Коммит снабжается сообщением (комментарием), в котором указывается, что за изменения были внесены. Выполним коммит, добавив к нему сообщение:

    git commit -m "Added first file"

    Git ведет историю коммитов. Для просмотра истории воспользуйтесь командой git log :

    Одна из самых мощных функций в Git - это ветвление. При помощи процедуры ветвления можно отделиться от основной версии проекта и начать работу в новом окружение, не затрагивая файлы основной ветки. Простыми словами, при помощи веток мы создаем копию файлов, присутствующих в репозитории, и изолируем их в новой ветке. Обратите внимание, что изменения, сделанные в одной ветке, не будут перенесены в другую ветку, пока вы сами не сделаете это вручную (про merge request мы поговорим в следующем разделе).

    При помощи функционала веток можно протестировать новую версию проекта, не изменяя файлы в основной ветке.

    Создадим новую ветку new_function:

    **** Выведем все доступные ветки:

    git branch выводит только те ветки, которые доступны локально. Для вывода всех веток (локальных и удаленных) необходимо использовать:

    **** Переключимся на ранее созданную ветку:

    git checkout new_function touch new-branch-file.txt git add new-branch-file.txt git commit -m "Added new-branch-file.txt file"

    Файл будет отображаться только в ветке new_function:

    Убедимся, переключившись обратно на ветку main:

    Как можно увидеть, ранее созданный файл new-branch-file.txt в ветке new_function недоступен в ветке main.

    Ветки можно удалять. Для этого используется команда git branch -d. При удалении ветки необходимо учитывать, что нельзя удалить текущую ветку. При попытке удаления текущей ветки Git вернет ошибку:

    git branch -d new_function

    Чтобы удалить текущую ветку, необходимо переключиться на любую другую доступную ветку, например, на ветку main:

    Далее ветку можно удалить:

    git branch -d new_function

    Если удаляемая ветка не была объединена, то при удаление такой ветки будет выведено предупреждение:

    Чтобы удалить такую ветку, необходимо использовать опцию -D :

    git branch -D new_function

    Особенностью использования веток является изоляция внесенных изменений — изменения доступные в одной ветке автоматически не появляются в других. В Git существует процесс слияния двух веток, который называется merge request. При слиянии все изменения, которые были внесены в одну ветку, переносятся в другую. Рассмотрим на примере слияния изменений из ветки new_function в ветку main.

    git checkout new_function touch new-branch-file.txt
    1. Добавляем созданный файл в индекс:
    git add new-branch-file.txt git commit -m "Added new-branch-file.txt file"
    1. Переключаемся на ветку main:

    2. Выполняем merge request:

    Теперь ранее внесенные изменения в ветке new_function появились в ветке main:

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

    Ранее мы работали только с локальными репозиториями. Но Git поддерживает работу и с удаленными репозиториями. Удаленный репозиторий - это репозиторий, который хранится на сервере.

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

    Локальный репозиторий можно подключить к удаленному репозиторию с помощью git remote add. Рассмотрим подключение на примере сервиса GitHub.

    1. Открываем GitHub, авторизуемся в аккаунте и создаем новый репозиторий:

    2. Возвращаемся на сервер, переходим в локальный репозиторий и подключаем его к удаленному:

    git remote add origin https://github.com/AlexFromMoscow6/demo-repo.git

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

    Отправим ранее добавленные изменения в удаленный репозиторий при помощи git push:

    При использование команды git push система запросит логин и пароль от учётной записи того сервиса, на котором хранится репозиторий. Ранее GitHub использовал пароли для процесса аутентификации, однако теперь вместо паролей используются только токены. Также важным моментом является то, что при использование GitHub, вместо пароля от учётной записи необходимо ввести токен. Если у вас отсутствует токен, то его необходимо создать. Инструкция по созданию токена приведена по ссылке.

    Переходим в GitHub и смотрим, чтобы файлы были опубликованы:

    Получение изменений из удаленного репозитория

    Чтобы поддерживать скачанный удаленный репозиторий в актуальном состоянии, используется команда git pull, которая соединятся с удаленным репозиторием и запрашивает изменения. Если изменения присутствуют, Git скачает их.

    Минимальный набор команд git для начала работы с проектом

    При использовании системы Git можно обойтись минимальным набором команд, чтобы инициализировать свой проект и отправить его в удаленный репозиторий. Рассмотрим данные действия на практическом примере. В качестве удаленной системы воспользуемся сервисом GitHub. В качестве приложения будет использовать небольшой проект на JavaScript.

    1. Инициализируем репозиторий Git:

    2. Добавляем все файлы (символ точки), которые располагаются в репозитории:

    git commit -m "Initial commit"
    1. Переходим в веб-версию GitHub, авторизуемся в своем аккаунте и создаем новый репозиторий (зеленая кнопка New):

    Задаем имя репозиторию и выбираем тип репозитория (публичный, который будет доступен для всех пользователей, или приватный, доступ до которого будет только у владельца репозитория; доступ для остальных пользователей необходимо будет настраивать отдельно):

    1. Возвращаемся в терминал и подключаем наш ранее созданный локальный репозиторий к удаленному:
    git remote add origin https://github.com/AlexFromMoscow6/simple-js-app.git
    1. Наконец, отправляем изменения в удаленный репозиторий:

    Далее возвращаемся на страницу репозитория в GitHub и проверяем, что все файлы были добавлены в репозиторий:


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны