Олег Марков
Просмотр удаленных репозиториев в Git - команда git remote -v
Введение
Команда git remote -v — один из самых простых, но при этом самых полезных инструментов в повседневной работе с Git. С ее помощью вы за одну секунду можете понять, к каким удаленным репозиториям привязан ваш локальный проект, по каким адресам Git забирает изменения и куда отправляет ваши коммиты.
Смотрите, я покажу вам, как эта команда помогает контролировать конфигурацию, находить ошибки в настройках и избегать проблем при совместной разработке. Мы разберем, что именно выводит git remote -v, чем отличаются URL для fetch и push, как меняется вывод в разных ситуациях и как использовать эту команду вместе с другими подкомандами git remote.
Зачем нужен просмотр удаленных репозиториев
Когда вы работаете с Git-проектом, у вас почти всегда есть как минимум один удаленный репозиторий. Например:
- репозиторий на GitHub, GitLab или Bitbucket;
- зеркальный репозиторий внутри компании;
- форк чужого проекта;
- несколько удаленных источников для одной и той же кодовой базы.
Важно понимать, что Git не "подтягивает" список удаленных репозиториев автоматически при каждом действии. Он использует те адреса, которые вы один раз настроили. Если в конфигурации ошибка, вы можете долго пытаться сделать push или pull, и только git remote -v покажет вам, что Git вообще пытается подключиться не туда.
Просмотр удаленных репозиториев помогает вам:
- быстро проверить, какой именно удаленный репозиторий используется по умолчанию;
- убедиться, что у вас правильный протокол (HTTPS или SSH);
- отличить URL для чтения (fetch) и для записи (push);
- увидеть несколько удаленных репозиториев и понять, какой за что отвечает;
- диагностировать проблемы с доступом и правами.
Теперь давайте перейдем к практике и разберемся, как выглядит вывод git remote -v и как его читать.
Базовый вывод git remote -v
Начнем с самого простого использования команды. Выполните в корне вашего Git-проекта:
git remote -v
Пример вывода, который вы можете увидеть:
origin git@github.com:username/project.git (fetch) # URL для получения изменений
origin git@github.com:username/project.git (push) # URL для отправки изменений
Разберем по частям каждую строку.
origin
Имя удаленного репозитория. Чаще всего это origin, потому что Git автоматически так называет удаленный репозиторий, если вы клонируете проект с помощью git clone.git@github.com:username/project.git
Это URL (адрес) удаленного репозитория. В данном примере используется SSH-форма адреса.(fetch)и(push)
Роль этого URL.(fetch)— адрес, с которого Git будет забирать изменения.(push)— адрес, на который Git будет отправлять ваши коммиты при выполнении git push.
Смотрите, я размещаю пример с более сложной конфигурацией, чтобы вам было проще понять:
git remote -v
Вывод:
origin https://github.com/company/project-readonly.git (fetch) # Только чтение
origin git@github.com:company/project.git (push) # Полный доступ
upstream git@github.com:parent-org/project.git (fetch) # Оригинальный репозиторий
upstream git@github.com:parent-org/project.git (push) # Можно отправлять изменения (если есть права)
Здесь уже два удаленных репозитория:
- origin — ваш основной удаленный репозиторий;
- upstream — исходный репозиторий, из которого, например, был создан форк.
Обратите внимание, что для origin используются разные адреса для fetch и push. Это позволяет, к примеру, получать код из репозитория с анонимным доступом (HTTPS) и отправлять через SSH с авторизацией.
Разница между git remote и git remote -v
Команда git remote без параметров показывает только имена удаленных репозиториев:
git remote
Пример вывода:
origin
upstream
То есть вы видите только имена, но не видите, к каким конкретно URL они привязаны.
Если вы добавите флаг -v (verbose, "подробный вывод"), Git покажет имена вместе с адресами и типом (fetch/push):
git remote -v
Вывод:
origin git@github.com:username/project.git (fetch)
origin git@github.com:username/project.git (push)
upstream git@github.com:parent-org/project.git (fetch)
upstream git@github.com:parent-org/project.git (push)
Давайте посмотрим, как это помогает в реальной задаче.
Представьте, что вы забыли, к какому GitHub-аккаунту привязан текущий проект. Вы можете:
- Выполнить git remote -v.
- Посмотреть на часть URL, где указан username.
- Понять, с каким учетным названием вы сейчас фактически работаете.
Это особенно полезно, когда на одной машине настроено несколько SSH-ключей или вы работаете с разными организациями.
Что означают fetch и push в выводе
Вы уже видели, что у каждого удаленного репозитория в выводе git remote -v может быть две строки — одна с пометкой (fetch), вторая с (push). Давайте разберемся, что именно за ними стоит.
fetch — получение изменений
URL с пометкой (fetch) используется, когда вы выполняете:
- git fetch
- git pull (который включает в себя fetch)
- иногда другие команды, которые читают состояние удаленного репозитория.
На практическом уровне это означает: именно по этому адресу Git подключается, чтобы узнать, какие новые коммиты появились в удаленном репозитории, и скачать их.
Например:
git fetch origin # Использует URL, помеченный как (fetch)
Комментарий:
# Git свяжется с сервером по адресу origin (fetch) и обновит ссылки
# на ветки, теги и другие объекты из удаленного репозитория
push — отправка изменений
URL с пометкой (push) используется при выполнении git push:
git push origin main # Использует URL, помеченный как (push)
Комментарий:
# Git подключается по URL (push) для origin
# и пытается отправить ваши локальные коммиты в ветку main на сервере
Здесь важно учитывать права доступа. Могут быть ситуации, когда:
- (fetch) указывает на публичный HTTPS-URL, доступный всем;
- (push) указывает на SSH-адрес, доступный только вам с ключами и нужными правами.
Это удобно, если команда часто клонирует репозиторий для чтения, но только некоторые разработчики имеют право отправлять изменения.
Когда fetch и push совпадают
Во многих проектах адреса для fetch и push одинаковые. В этом случае вывод упрощается:
origin git@github.com:username/project.git (fetch)
origin git@github.com:username/project.git (push)
Даже если адрес один и тот же, Git все равно показывает две строки — чтобы вы ясно понимали, какие адреса используются для разных операций. Это помогает избежать путаницы, если позже вы захотите поменять один из URL.
Как git remote -v связан с конфигурацией Git
Вывод git remote -v на самом деле берется из конфигурационных файлов Git, в первую очередь из .git/config в корне вашего репозитория. Вы можете открыть этот файл и увидеть, откуда появляются эти данные.
Например, если вы посмотрите содержимое .git/config, то увидите примерно такой фрагмент:
[remote "origin"]
url = git@github.com:username/project.git # URL по умолчанию
fetch = +refs/heads/*:refs/remotes/origin/* # Что именно забирать при fetch
Комментарий:
# remote "origin" - имя удаленного репозитория
# url - базовый URL, который используется по умолчанию и для fetch и для push
# fetch - правило, какие ветки нужно синхронизировать
Если у вас разные URL для fetch и push, секция будет выглядеть так:
[remote "origin"]
url = https://github.com/company/project-readonly.git # URL для fetch
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = git@github.com:company/project.git # URL для push
Комментарий:
# url - по умолчанию используется для fetch
# pushurl - переопределяет URL для операций push
Команда git remote -v читает именно эти поля url и pushurl и отображает их в удобном виде.
Вывод:
- если задан только url — он показывается и для fetch, и для push;
- если есть и url, и pushurl — url будет с (fetch), а pushurl — с (push).
Это важно понимать, если вы когда-то редактируете конфигурацию руками.
Типы URL в выводе git remote -v
Вы уже видели несколько вариантов URL. Давайте систематизируем их, чтобы вы могли сразу распознавать, с чем имеете дело.
HTTPS-URL
Пример:
origin https://github.com/username/project.git (fetch)
origin https://github.com/username/project.git (push)
Особенности:
- Работает "из коробки", не нужны SSH-ключи.
- Часто запрашивает логин и пароль или токен доступа, если вы не настроили кэширование.
- Удобен для быстрой клонирования и одноразовых операций.
SSH-URL
Пример:
origin git@github.com:username/project.git (fetch)
origin git@github.com:username/project.git (push)
Особенности:
- Требуется настроенный SSH-ключ.
- Аутентификация происходит автоматически через ключ, без повторного ввода пароля.
- Часто используется для постоянной разработки.
Локальные и файловые URL
Иногда репозиторий может находиться на локальном диске или сетевом ресурсе:
origin /srv/git/project.git (fetch)
origin /srv/git/project.git (push)
backup file:///backup/git/project.git (push)
backup file:///backup/git/project.git (fetch)
Эти варианты чаще встречаются в корпоративной инфраструктуре, при бэкапах или в тестовых сценариях.
Когда вы смотрите на вывод git remote -v, имеет смысл сразу оценить тип URL — это помогает понять, как именно Git будет аутентифицироваться и какие потенциальные проблемы могут возникнуть (например, нужен ли SSH-ключ или токен).
Практические сценарии использования git remote -v
Теперь давайте разберем несколько типичных задач, в которых git remote -v особенно полезен.
Проверка, к какому репозиторию привязан проект
Сценарий: вы склонировали какой-то проект давно, потом сделали несколько форков и теперь не помните, к какому именно репозиторию привязан этот локальный каталог.
Решение:
git remote -v
Комментарий:
# Посмотрите на значение после имени origin
# Так вы поймете, куда ведет ваш текущий репозиторий
Если вы видите, что origin указывает, например, на ваш личный форк, а вы ожидали оригинальный проект, это сразу заметно по части URL с username или организацией.
Быстрая диагностика проблем с push
Сценарий: вы выполняете git push origin main и получаете ошибку доступа или неизвестный хост. Причина может быть в неверном URL.
Решение: сначала проверьте, куда вообще Git пытается отправить данные.
git remote -v
Обратите внимание:
- если URL использует протокол HTTPS, а вы привыкли работать через SSH, возможно, вам стоит сменить его;
- если домен или путь неверные (опечатка, другая организация), вы сразу это увидите.
После этого уже можно исправлять URL (об этом будет чуть позже).
Понимание конфигурации форков: origin и upstream
Сценарий: вы сделали форк проекта на GitHub и хотите:
- получать обновления из оригинального репозитория;
- отправлять свои изменения в собственный форк.
Обычно:
- origin — ваш форк;
- upstream — оригинальный проект.
Посмотрим на конфигурацию:
git remote -v
Пример вывода:
origin git@github.com:yourname/project.git (fetch)
origin git@github.com:yourname/project.git (push)
upstream git@github.com:parent-org/project.git (fetch)
upstream git@github.com:parent-org/project.git (push)
Как это использовать:
- git fetch upstream — получить изменения из оригинального проекта;
- git push origin main — отправить свои изменения в собственный форк.
Команда git remote -v здесь помогает вам не перепутать, какой удаленный репозиторий за что отвечает.
Проверка перед удалением или изменением удаленного репозитория
Прежде чем вы будете что-то менять в удаленных репозиториях, удобно посмотреть текущую конфигурацию:
git remote -v
Дальше вы уже принимаете решение:
- нужно ли удалить какой-то remote;
- нужно ли переименовать;
- нужно ли изменить URL.
Гораздо безопаснее сначала посмотреть вывод git remote -v и только потом выполнять команды изменения.
Изменение конфигурации удаленных репозиториев и связь с git remote -v
Чтобы уверенно пользоваться git remote -v, полезно знать, как именно вы можете менять конфигурацию удаленных репозиториев. Давайте пройдемся по основным операциям и параллельно посмотрим, как меняется вывод.
Добавление нового удаленного репозитория
Представим, что вы хотите добавить еще один источник кода, например, оригинальный репозиторий в роли upstream.
Команда:
git remote add upstream git@github.com:parent-org/project.git
Комментарий:
# upstream - имя нового удаленного репозитория
# git@github.com:parent-org/project.git - URL, который вы привязываете
Теперь давайте посмотрим на вывод:
git remote -v
Ожидаемый результат:
origin git@github.com:yourname/project.git (fetch)
origin git@github.com:yourname/project.git (push)
upstream git@github.com:parent-org/project.git (fetch)
upstream git@github.com:parent-org/project.git (push)
Вы сразу видите новый remote с его URL.
Изменение URL для fetch и push
Бывают ситуации, когда вам нужно поменять протокол или адрес:
- перевести origin с HTTPS на SSH;
- указать отдельный URL только для push.
Посмотрим на два варианта.
1. Меняем URL и для fetch, и для push
Команда:
git remote set-url origin git@github.com:username/project.git
Комментарий:
# Устанавливаем новый базовый URL для remote origin
# Он будет использоваться и как fetch, и как push URL
Теперь снова проверяем:
git remote -v
Вывод:
origin git@github.com:username/project.git (fetch)
origin git@github.com:username/project.git (push)
2. Отдельный URL только для push
Допустим, вы хотите оставаться на HTTPS для fetch, но использовать SSH для push.
Сначала установим базовый URL (fetch):
git remote set-url origin https://github.com/company/project-readonly.git
Потом зададим pushurl:
git remote set-url --push origin git@github.com:company/project.git
Комментарий:
# --push говорит Git, что мы меняем только URL для операций push
Теперь давайте посмотрим вывод:
git remote -v
Результат:
origin https://github.com/company/project-readonly.git (fetch)
origin git@github.com:company/project.git (push)
Как видите, git remote -v сразу отражает разницу между fetch и push.
Переименование удаленного репозитория
Иногда вы хотите поменять имя удаленного репозитория, не трогая его адрес. Например, переименовать origin в upstream или наоборот.
Команда:
git remote rename origin old-origin
Комментарий:
# Меняем имя remote origin на old-origin
# URL и все настройки при этом сохраняются
Теперь смотрим:
git remote -v
Пример вывода:
old-origin git@github.com:username/project.git (fetch)
old-origin git@github.com:username/project.git (push)
Это полезно, если вы, к примеру, переносите проект на новый репозиторий и хотите переназначить имена так, чтобы origin всегда указывал на "текущий основной" источник кода.
Удаление удаленного репозитория
Если какой-то remote больше не нужен, вы можете его удалить.
Команда:
git remote remove upstream
Или эквивалентная короткая форма:
git remote rm upstream
Проверяем:
git remote -v
Теперь вы больше не увидите upstream в списке. Это полезно для поддержания чистоты конфигурации, чтобы лишние remotes не вводили в заблуждение.
Как git remote -v помогает избегать типичных ошибок
Давайте разберем несколько распространенных проблем, которые решаются с помощью одной только проверки git remote -v.
Ошибка: отправка в "чужой" репозиторий
Случай: вы работаете на одной машине с несколькими проектами, часто переключаетесь между каталогами и в какой-то момент выполняете git push, не проверив, в каком вы репозитории. В итоге изменения улетают не туда.
Защититься можно привычкой:
- Перед важным push выполнить git remote -v.
- Сверить, что origin действительно указывает на ожидаемый репозиторий.
Это особенно актуально в монорепозиториях, когда разные части проекта могут быть связаны с разными удаленными репозиториями.
Ошибка: неверный протокол и проблемы с доступом
Иногда проект был склонирован по HTTPS, и каждый push требует логина и пароля или токена. Вы хотите перейти на SSH.
Вы можете быстро понять, какой протокол используется:
git remote -v
Если видите HTTPS, а хотите SSH, вы просто меняете URL, как мы рассматривали выше, и снова проверяете вывод git remote -v, чтобы убедиться, что все настроено правильно.
Ошибка: забытый upstream в форке
В форкнутых проектах распространенная проблема — разработчик забывает настроить upstream и долго не понимает, почему локальные ветки не получают обновления из оригинального репозитория.
Проверка:
git remote -v
Если вы видите только origin и никакого upstream, значит, оригинальный репозиторий просто не привязан. Тогда вы добавляете его через git remote add и снова проверяете конфигурацию через git remote -v.
Ошибка: несколько remotes с похожими именами
Ситуация: у вас есть remotes с именами вроде origin, origin2, backup, mirror. Легко запутаться, куда вы на самом деле пушите изменения.
Вывод git remote -v помогает:
- увидеть все remotes сразу с их адресами;
- визуально отличить, какой из них боевой, какой резервный, какой тестовый.
Здесь можно договориться внутри команды о читаемых именах (например, production, staging, backup) и периодически проверять конфигурацию.
Расширенное использование git remote -v в большом проекте
В больших проектах с несколькими репозиториями, зеркалами и окружениями команда git remote -v становится своего рода "картой подключений" для вашего локального репозитория. Покажу вам, как это может выглядеть.
Представим конфигурацию:
git remote -v
Вывод:
origin git@github.com:company/project.git (fetch)
origin git@github.com:company/project.git (push)
staging ssh://git@staging.company.com/project.git (fetch)
staging ssh://git@staging.company.com/project.git (push)
production ssh://git@prod.company.com/project.git (fetch)
production ssh://git@prod.company.com/project.git (push)
backup file:///mnt/backup/git/project.git (push)
backup file:///mnt/backup/git/project.git (fetch)
Как это может использоваться:
- origin — основной репозиторий разработки, связанный с GitHub или внутренним сервером;
- staging — репозиторий для промежуточного окружения;
- production — репозиторий для боевого окружения;
- backup — отдельное место для резервного копирования.
Используя один только вывод git remote -v, вы можете:
- за секунду понять архитектуру синхронизации;
- не перепутать, куда отправлять изменения для какого окружения;
- проверять перед "опасными" push, что вы действительно пушите туда, куда нужно.
Здесь особенно важно, что git remote -v показывает ВСЕ remotes, а не только origin.
Заключение
Команда git remote -v — это простой, но очень информативный инструмент, который помогает держать под контролем конфигурацию удаленных репозиториев. Она показывает:
- какие удаленные репозитории привязаны к вашему проекту;
- какие URL используются для получения (fetch) и отправки (push) изменений;
- какие протоколы применяются — HTTPS, SSH, локальные пути или файловые URL.
Практическая ценность в том, что перед любыми сетевыми операциями (git fetch, git pull, git push) вы можете за секунду проверить, куда на самом деле обращается Git. Это уменьшает количество ошибок, связанных с неправильными адресами, протоколами или учетными данными, и помогает лучше понимать архитектуру работы с удаленными репозиториями, особенно в форках и больших проектах с несколькими remotes.
Регулярно используя git remote -v, вы вырабатываете хорошую привычку: сначала смотреть на конфигурацию, а уже потом выполнять действия, которые меняют удаленные репозитории.
Частозадаваемые технические вопросы по теме и ответы
Как сделать так, чтобы git remote -v показывал разные URL для разных веток?
Git не настраивает URL per-branch напрямую, но вы можете использовать разные remotes и привязывать ветки к ним через upstream:
git branch --set-upstream-to=staging/main main
# Ветка main будет по умолчанию работать с remote staging
Теперь git push и git pull из ветки main будут использовать staging, а не origin. Посмотреть URL можно через git remote -v.
Почему git remote -v ничего не выводит?
Если команда git remote -v не показывает ни одной строки, значит, в репозитории еще не настроено ни одного удаленного репозитория. Решение — добавить хотя бы один remote:
git remote add origin git@github.com:username/project.git
git remote -v # Теперь remote появится в выводе
Как вывести только URL без пометок fetch/push?
Напрямую git remote -v всегда показывает и пометки, и имена. Если вам нужны только URL, используйте:
git remote get-url origin
# Покажет URL для fetch
git remote get-url --push origin
# Покажет URL для push
Так вы получите только строку с адресом.
Как узнать, какой remote будет использоваться по умолчанию для push?
По умолчанию Git берет remote из настроек ветки. Проверить можно так:
git status -sb
# В скобках будет указана привязанная удаленная ветка, например origin/main
git config branch.main.remote
# Покажет имя remote, обычно origin
URL этого remote вы уже можете посмотреть через git remote -v.
Как увидеть удаленные ветки, связанные с конкретным remote?
Для этого используйте:
git branch -r
# Покажет все удаленные ветки
git ls-remote origin
# Покажет ссылки на ветки и теги именно для origin
Связь между конфигурацией ветки и remote можно проверить так:
git config branch.main.remote
# Имя remote, с которым работает ветка main
Постройте личный план изучения Git до уровня Middle — бесплатно!
Git — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Git
Лучшие курсы по теме

Основы Git
Антон Ларичев
TypeScript с нуля
Антон Ларичев