Форк репозитория в GitHub и GitLab
Что такое форк репозитория #
Форк (англ. fork) — это полная копия репозитория, которая создаётся на сервере GitHub или GitLab и остаётся связана с оригинальным проектом. Когда вы форкуете чей-то репозиторий, вся история коммитов, все ветки и все файлы копируются в ваш аккаунт, и вы становитесь полноправным владельцем этой копии.
Полная копия репозитория в вашем аккаунте #
При создании форка GitHub или GitLab:
- Копирует все коммиты из истории проекта
- Копирует все существующие ветки
- Копирует теги и релизы
- Создаёт новый репозиторий в вашем аккаунте
- Сохраняет связь с оригинальным репозиторием (upstream)
Вы можете работать с форком независимо: создавать ветки, пушить коммиты, удалять файлы — и всё это не повлияет на оригинальный проект.
Форк vs Clone: отличие #
Студенты и начинающие разработчики часто путают форк и клонирование. Это две совершенно разные операции:
Форк — это операция на сервере:
- Выполняется через веб-интерфейс GitHub/GitLab
- Создаёт новый удалённый репозиторий на сервере
- Репозиторий связан с оригиналом (есть upstream)
- Видна история форка на GitHub (fork badge)
Clone — это локальная операция:
- Выполняется в терминале с помощью
git clone - Создаёт копию репозитория на вашем компьютере
- Может быть клон оригинального репо или клон форка
- Подробнее читайте в статье /ru/git/git-clone/
Обычный сценарий: вы форкуете репозиторий на GitHub, а затем клонируете ваш форк на локальную машину.
Когда форкают репозиторий #
Форк используется в нескольких ситуациях:
Контрибьюция в open source: Если вы хотите внести правки в чужой проект, вы форкуете его, вносите изменения в своей копии, а затем создаёте Pull Request (или Merge Request на GitLab) для предложения своих изменений авторам.
Эксперименты без риска: Вы можете экспериментировать с кодом в своём форке, не опасаясь испортить оригинальный проект. Если что-то пойдёт не так, оригинал останется в целости.
Создание независимого проекта: Если вам понравился проект и вы хотите создать на его основе что-то своё, вы форкуете его и развиваете независимо.
Создание форка на GitHub #
Пошаговая инструкция #
- Откройте репозиторий на GitHub, который хотите форкнуть
- Нажмите кнопку Fork в правом верхнем углу страницы
- Вы увидите диалоговое окно, где можно выбрать:
- Owner — в какой аккаунт создавать форк (ваш аккаунт, организация)
- Repository name — имя форка (по умолчанию совпадает с оригиналом)
- Description — описание форка (необязательно)
Опция копирования ветвей #
В диалоговом окне вы можете выбрать:
- Copy the main branch only — форкнуть только главную ветку (по умолчанию)
- Copy all branches — форкнуть все ветки из оригинального репо
Если оригинальный проект имеет несколько активных веток разработки (например, develop, staging, main), имеет смысл скопировать все ветки.
Что происходит при создании форка #
После нажатия кнопки Fork:
- GitHub создаёт точную копию репозитория в вашем аккаунте
- На странице форка отображается бадж “forked from ORIGINAL_OWNER/original-repo”
- Вы становитесь владельцем форка и можете управлять его настройками
- GitHub сохраняет связь между форком и оригиналом для синхронизации
Создание форка на GitLab #
Процесс создания форка на GitLab очень похож на GitHub:
- Откройте проект на GitLab
- Нажмите кнопку Fork (находится рядом с кнопкой Clone)
- В диалоговом окне выберите Namespace — куда создавать форк (ваш профиль или группа)
- Оставьте название проекта по умолчанию или измените его
- Нажмите Fork project
Отличия форка GitLab от GitHub #
- В GitLab форк может быть создан с сохранением всех веток (по умолчанию копируются все)
- GitLab использует термин Merge Request вместо Pull Request
- Интерфейс синхронизации форка немного отличается
- На странице форка отображается информация о связи с исходным проектом
Клонирование форка и настройка upstream #
После создания форка нужно клонировать его на локальную машину и настроить связь с оригинальным репозиторием.
Клонирование вашего форка #
# Клонировать ваш форк на локальную машину
git clone https://github.com/YOUR_USERNAME/forked-repo.git
cd forked-repo
Замените YOUR_USERNAME на ваше имя пользователя на GitHub и forked-repo на название вашего форка.
Добавление upstream #
После клонирования нужно добавить оригинальный репозиторий как “upstream”. Upstream — это удалённый репозиторий, из которого вы будете получать обновления.
# Добавить оригинальный репозиторий как upstream
git remote add upstream https://github.com/ORIGINAL_OWNER/original-repo.git
# Проверить, что оба remote добавлены
git remote -v
Команда git remote -v покажет вам оба удалённых репозитория:
origin https://github.com/YOUR_USERNAME/forked-repo.git (fetch)
origin https://github.com/YOUR_USERNAME/forked-repo.git (push)
upstream https://github.com/ORIGINAL_OWNER/original-repo.git (fetch)
upstream https://github.com/ORIGINAL_OWNER/original-repo.git (push)
Подробнее о remotes можно прочитать в статье /ru/git/git-remote-v/.
- origin — ваш форк (вы можете пушить сюда)
- upstream — оригинальный репозиторий (только для получения обновлений)
Синхронизация форка с оригиналом #
Со временем оригинальный репозиторий развивается, в него добавляются новые коммиты. Ваш форк может отставать от оригинала. Поэтому нужно периодически синхронизировать форк.
Способ 1: Синхронизация через командную строку #
# Получить изменения из оригинального репозитория
git fetch upstream
# Переключиться на главную ветку (обычно main или master)
git switch main
# Слить изменения из upstream в вашу локальную ветку
git merge upstream/main
# Запушить обновлённую ветку в ваш форк
git push origin main
Эта последовательность команд:
- Загружает информацию об обновлениях в оригинальном репо
- Переходит на главную ветку
- Слизывает все новые коммиты из оригинала
- Отправляет обновления в ваш форк на GitHub
Способ 2: Синхронизация через веб-интерфейс GitHub #
GitHub предоставляет удобный способ синхронизировать форк без командной строки:
- Перейдите на страницу вашего форка
- Нажмите кнопку Sync fork (если она есть)
- Выберите Update branch
Этот способ применяет самый простой сценарий синхронизации.
Внесение изменений и создание Pull Request из форка #
Основной сценарий использования форка — это внесение изменений и предложение их авторам оригинального проекта через Pull Request.
Создание ветки для изменений #
# Убедитесь, что вы на главной ветке
git switch main
# Создайте новую ветку для ваших изменений
git switch -c fix/my-bugfix
# Или используйте старый синтаксис:
# git checkout -b fix/my-bugfix
Имя ветки должно быть描述ным и следовать соглашению вашего проекта (например, feature/new-feature, fix/bug-name, docs/update-readme).
Внесение изменений и коммиты #
# Внесите изменения в файлы
# Проверьте, какие файлы изменились
git status
# Добавьте изменения в staging area
git add .
# Создайте коммит с описанием
git commit -m "Fix: исправлена ошибка в обработке ввода"
# Можно добавить и залиться несколько коммитов перед пушем
git push origin fix/my-bugfix
Создание Pull Request на GitHub #
- Перейдите на страницу вашего форка на GitHub
- Вы увидите желтую полоску “Compare & pull request” с вашей веткой
- Нажмите эту кнопку (или найдите кнопку Pull requests в меню)
- Заполните форму Pull Request:
- Title — короткое название (например, “Fix: исправлена ошибка в парсере”)
- Description — подробное описание изменений
- Commits — все ваши коммиты будут видны
- Files changed — полный diff (различие между веткой и main)
- Нажмите Create pull request
После создания Pull Request авторы оригинального проекта получат уведомление и смогут просмотреть ваши изменения, оставить комментарии или принять ваш PR.
Форк на GitLab: создание Merge Request #
На GitLab процесс аналогичен, но используется терминология Merge Request вместо Pull Request.
Пошагово #
- Создайте форк на GitLab (как описано выше)
- Клонируйте форк:
git clone https://gitlab.com/YOUR_USERNAME/forked-repo.git - Добавьте upstream:
git remote add upstream https://gitlab.com/ORIGINAL_OWNER/original-repo.git - Создайте ветку для изменений:
git switch -c feature/new-feature - Внесите изменения и запушьте:
git push origin feature/new-feature - На странице форка в GitLab появится предложение создать Merge Request
- Нажмите Create merge request и заполните форму
Процесс практически идентичен GitHub, просто с другой терминологией.
Удаление форка #
Если форк больше не нужен, его можно удалить.
Удаление форка на GitHub #
- Перейдите на страницу форка
- Нажмите Settings (вкладка с шестёренкой)
- Прокрутите вниз до Danger Zone
- Нажмите Delete this repository
- Введите название репозитория для подтверждения
- Нажмите I understand the consequences, delete this repository
Удаление форка на GitLab #
- Откройте форк
- Перейдите в Settings → General
- Прокрутите до Advanced
- Нажмите Delete project
- Введите название проекта для подтверждения
Что происходит с Pull Request после удаления форка #
Если вы удалили форк, но есть активный Pull Request:
- Pull Request останется видимым (но заметит, что форк удалён)
- Авторы оригинального проекта смогут просмотреть ваш PR, но не смогут запушить изменения в ваш форк
- Если PR ещё не был merged, он может остаться открытым
Лучше закрыть Pull Request перед удалением форка или дождаться его merge.
FAQ #
Что такое форк в GitHub? #
Форк — это полная копия репозитория, которая создаётся в вашем аккаунте на GitHub. Форк сохраняет историю и связь с оригинальным проектом. Вы можете независимо разрабатывать свою версию проекта и предлагать изменения авторам через Pull Request.
Чем форк отличается от клонирования? #
Форк создаётся на сервере GitHub/GitLab через веб-интерфейс и даёт вам полный контроль над копией репозитория на платформе. Клонирование создаёт локальную копию репозитория на вашем компьютере через команду git clone. Подробнее: /ru/git/git-clone/
Обычно вы сначала форкуете репозиторий на GitHub, а потом клонируете ваш форк на локальную машину.
Как синхронизировать форк с оригинальным репозиторием? #
Синхронизировать форк можно двумя способами:
- Через командную строку:
git fetch upstream && git switch main && git merge upstream/main && git push origin main - Через веб-интерфейс GitHub: кнопка “Sync fork” → “Update branch”
Синхронизация нужна, чтобы ваш форк получал обновления из оригинального проекта.
Как сделать форк на GitLab? #
На GitLab процесс аналогичен GitHub. Откройте проект, нажмите кнопку Fork, выберите namespace (ваш профиль или группу) и подтвердите создание. На GitLab форк копирует все ветки по умолчанию.
Можно ли сделать форк приватного репозитория? #
Нет, форк можно создать только для публичного репозитория. Если репозиторий приватный, вы не сможете его форкнуть. Однако если у вас есть доступ к приватному репозиторию, вы можете клонировать его локально.
Как удалить форк на GitHub? #
Перейдите в Settings вашего форка, прокрутите до Danger Zone и нажмите Delete this repository. Введите название репозитория для подтверждения. Удаление необратимо.
Дополнительные ресурсы #
Если вы новичок в системе контроля версий Git, рекомендуем прочитать:
- /ru/git/kak-sozdat-repozitorij-github/ — как создать новый репозиторий на GitHub
- /ru/git/github-vs-gitlab/ — сравнение GitHub и GitLab
Для более глубокого понимания работы с удалёнными репозиториями см. /ru/git/git-remote-v/.
Заключение #
Форкирование репозитория — это основной инструмент для внесения вклада в open source проекты. Процесс простой: создаёте форк, клонируете его, синхронизируете с оригиналом, вносите изменения и создаёте Pull Request.
На GitHub и GitLab этот процесс примерно одинаков, различаются только названия кнопок и терминология (Pull Request на GitHub, Merge Request на GitLab).
Главное помнить:
- Форк создаётся на сервере
- Clone создаётся локально
- Upstream — это оригинальный репозиторий для синхронизации
- Origin — это ваш форк
- Синхронизируйте форк перед началом работы над PR
Удачи в контрибьютинге в open source!