linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Удалённые репозитории/remote-cmd

kb/remote ── Удалённые репозитории ── beginner

git remote

Управляет списком URL-ов, с которыми связан репозиторий. По умолчанию после `clone` один remote по имени `origin`. Можно добавить второй (`upstream` для fork-flow), удалить, переименовать.

view as markdownaka: git-remote

Remote - это просто имя для URL. Внутри .git/config под каждый remote лежит секция:

[remote "origin"]
    url = git@github.com:foo/bar.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Команда git remote смотрит и редактирует этот список.

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

bash
git remote                          # список имён
git remote -v                       # с URL'ами и направлениями
git remote show origin              # детальная инфа: ветки, tracking
git remote add upstream <url>       # добавить
git remote rename origin foo        # переименовать
git remote remove upstream          # удалить
git remote set-url origin <new>     # сменить URL без re-clone

Типичный вывод git remote -v:

origin    git@github.com:me/bar.git (fetch)
origin    git@github.com:me/bar.git (push)
upstream  git@github.com:original/bar.git (fetch)
upstream  git@github.com:original/bar.git (push)

Два направления - fetch и push - могут указывать на разные URL'ы (редкий случай: тянуть из одного, пушить в другой). Обычно совпадают.

Почему «origin»

Просто имя. Git клонирует с origin по дефолту, потому что так принято. Хочешь - переименовывай:

bash
git remote rename origin upstream

В fork-сценарии (см. fork-vs-clone) часто:

  • origin - твой fork (me/repo),
  • upstream - оригинальный репо (original/repo).

Подробнее в upstream-vs-origin.

Сменить URL без re-clone

Сценарий: репозиторий переехал с GitHub на GitLab. Не нужно клонировать заново:

bash
git remote set-url origin git@gitlab.com:foo/bar.git
git fetch

Всё работает дальше, история на месте.

Push URL и Fetch URL раздельно

Иногда нужно тянуть из публичного зеркала, а пушить в приватный:

bash
git remote set-url origin https://github.com/foo/bar.git
git remote set-url --push origin git@gitlab.com:foo/bar.git

Теперь git fetch пойдёт на GitHub, git push - на GitLab. Это редкий случай, но иногда полезно при миграциях.

Подводные камни

  • git remote add НЕ делает fetch автоматически. После добавления нужно git fetch <name>, иначе ветки нового remote не появятся.
  • URL хранится в .git/config без шифрования. Если URL содержит пароль (https://user:password@...) - он лежит plaintext. Лучше через SSH или credential helper.
  • Имена remote локальные. У тебя upstream может указывать на одно, у коллеги на другое. Это нормально, но при общении говорите URL.

§ команды

bash
git remote -v

Список всех remote с URL

bash
git remote add upstream <url>

Добавить второй remote - обычно оригинал при fork-flow

bash
git remote set-url origin <new-url>

Сменить URL без переклонирования

bash
git remote show origin

Подробная инфа: какие ветки tracking, какие нет

§ см. также

  • clonegit cloneСоздаёт локальную копию удалённого репозитория. Под капотом - `init` + добавление origin + `fetch` всей истории + `checkout` основной ветки. Самая первая команда при работе с чужим проектом.
  • fetchgit fetchСкачивает обновления с remote, но **не трогает** локальные ветки. Обновляет только refs/remotes/origin/. Безопасная команда: после fetch ты видишь, что пришло, и решаешь, что с этим делать.
  • upstream-vs-originupstream vs originДва общепринятых имени remote. `origin` - куда клонировал (обычно свой fork). `upstream` - «настоящий» проект, у которого ты сделал fork. Это просто конвенция: ничего магического, оба имени можно переименовать.
  • fork-vs-cloneFork vs cloneClone - это локальная копия репо. Fork - это копия **на сервере** под твоим аккаунтом. В open-source ты обычно делаешь fork (получаешь права записи на свою копию), потом clone форка (работаешь локально), и PR из форка в оригинал.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки