Изменение Git Remote 'push на' по умолчанию

228

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

git push

Вместо того:

git push upstream

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

Я пытался удалить оригинальный (клонированный) пульт

git remote rm origin

Который действительно удалил оригинальный пульт. Но не решает git pushпроблему. Я все еще получаю:

фатальный: нет настроенного пункта назначения Либо укажите URL-адрес из
командной строки, либо настройте удаленный репозиторий, используя ...

Я также пытался играть с:

git remote set-url --push myfork origin

и другие опции, но ни одна из них не работает (может быть, потому что я удалил удаленный источник слишком рано?)

После ответа здесь я попытался изменить:

git config push.default upstream (or matching)

но ни один не работал.

alonisser
источник

Ответы:

215

Вы можете использовать git push -u <remote_name> <local_branch_name>для установки по умолчанию вверх по течению. Смотрите документацию для git push для более подробной информации.

1615903
источник
1
Не работает: я получаю '' fatal: 'origin', по-видимому, не является фатальным хранилищем git: удаленный конец неожиданно завис '' '' возможно, потому что я удалил origin удаленный, прежде чем двигаться дальше. только что нашел рабочее решение,
обновлю
34
В качестве дополнительного пояснения синтаксис должен быть git push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>.
Марко Лаззери
33
Пример: git push -u origin master:master.
starbeamrainbowlabs
1
После установки удаленного по умолчанию ... разве вы не можете принудительно git pushвыдвинуть удаленную ветку текущей локальной ветки? Я имею в виду делать это, это означает, что я должен выполнить эту команду для каждой ветви. Правильно? Разве я не могу просто выполнить начальную настройку всего репо? @MarcoLazzeri
Мед
2
@starbeamrainbowlabs Не git push -u origin masterдостаточно? Вы просто иллюстрируете полный синтаксис?
Джозия Йодер
108

Чтобы изменить, какой «восходящий» пульт «подключен» к вашей ветке, используйте git branchкоманду с флагом «восходящий».

Убедитесь, что пульт существует первым:

git remote -vv

Установите предпочтительный пульт для текущей (извлеченной) ветви:

git branch --set-upstream-to <remote-name>

Подтвердите, что ветка настроена с правильным восходящим удаленным:

git branch -vv

Джордан Маккалоу
источник
2
Только что попробовал git branch --set-upstream-to myforkи получил ошибку:> ошибка: неизвестная опция `set-upstream-to 'Я запускаю git 1.7.9
alonisser
3
Синтаксис изменен в 1.8 см stackoverflow.com/questions/520650/...
jtniehof
1
Смотрите следующий ответ: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Инон Эрлих
10
git branch -u <remotename>/<branch>работал на меня. Команда была выполнена с проверенной местной веткой интересов. Обратитесь к разделу «Отслеживание Ветки» в git-scm.com/book/it/v2/Git-Branching-Remote-Branches
Норио
2
Подробный вывод удаленной команды действительно просто git remote -vили git remote --verbose. -vv«S дополнительный v является излишним.
Artif3x
45

Работа с Git 2.3.2 ...

git branch --set-upstream-to myfork/master

Теперь status, pushи pullзаострены на myforkудаленный

pinei
источник
Это работает, когда вы просто хотите установить значение по умолчанию для pull.
StingyJack
39

Вы можете легко изменить пульт по умолчанию для филиалов, просто используя эту команду

git push -u <remote_name> --all
Николай Денисюк
источник
14
Просто чтобы заметить, это подтолкнет их всех, а также поменяет их восходящий пульт.
Poolie
16

Если вы это сделали git push origin -u localBranchName:remoteBranchNameи последовательно выполнили git pushкоманды, вы получите ошибки, которых тогда не существует, а затем выполните следующие действия:

  1. git remote -v

Проверьте, есть ли какой-нибудь пульт, который меня не волнует. Удалить их с помощьюgit remote remove 'name'

  1. git config --edit

Ищите возможные признаки старого / несуществующего пульта дистанционного управления. Ищите pushdefault:

[remote]
  pushdefault = oldremote

Обновите oldremoteзначение и сохраните.

git push должен работать сейчас.

Шербан Гицэ
источник
2
Спасибо! Я склонен добавлять -uпри использовании git pushна другой пульт из-за мышечной памяти. Это делает данный пульт по умолчанию, сброс его с помощью git config --edit(или повторное нажатие и установка нового пульта) решил проблему.
Тим Визе
13

Просто пояснение (с использованием git версии 1.7.9.5 на Ubuntu 12.04):

Git добавит / удалит пульты. Это удаленные экземпляры git с подключенным сервером.

git remote add myremote git://remoteurl

Затем вы можете получить указанный git-репозиторий так:

git fetch myremote

Кажется, что это создает ветку с именем «myremote», однако удаленный для ветви не устанавливается автоматически. Для этого вы должны сделать следующее:

Сначала убедитесь, что у вас есть эта проблема, т.е.

git config -l | grep myremote

Вы должны увидеть что-то вроде:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master

Если вы видите branch.myremote.remote=., то вы должны продолжить:

git config branch.myremote.remote myremote
git checkout myremote
git pull

Теперь вы должны быть в курсе событий с удаленным репозиторием, а ваши пулы / толчки должны быть привязаны к соответствующему пульту. Вы можете переключать пульты таким образом, для каждой ветви . [Примечание] [1]

Согласно Официальной документации Git Config , вы можете настроить push-ветку по умолчанию (просто выполните поиск remote.pushdefault на этой странице), однако имейте в виду, что это не повлияет на уже существующие репозитории / ветки, так что это будет работать, но только для новых репозиториев / веток. Вы должны помнить, что --globalбудут заданы пользовательские настройки репозитория по умолчанию (~ / .gitconfig), --systemбудут установлены общесистемные настройки репозитория (/ etc / gitconfig), и ни один флаг не установит параметры конфигурации для текущего репозитория (./.gitconfig).

Также следует отметить, что опция конфигурации push.default предназначена для настройки поведения ref-spec , а не удаленного поведения.

[1]: git branch --set-upstream myotherremoteобычно работает здесь, однако git будет жаловаться, что не будет использовать ветку как свой удаленный, если git branch --set-upstream myremoteиспользуется. Однако я считаю, что это неправильное поведение.

оборота смаудет
источник
Вместо этого git config -l | grep myremoteвы можете просто использовать:git config --get branch.myremote.remote
Murmel
@Murmel во-первых, это вики сообщества, поэтому не стесняйтесь улучшать, во-вторых, --get предполагает определенное поведение, я отмечаю, что есть и другие способы настройки апстрима, но это дает возможность найти информацию, не полагаясь только на инструменты git. верный. Git не совершенен, лучше понять данные, что он делает, а затем надеяться, что его вызовы работают должным образом.
Смодеть
10

Может быть полезно взглянуть на .git/configваш репозиторий, в нем будут перечислены все пульты, а также пульт по умолчанию для каждой ветви.

например.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitea.xxx.be:fii/web2016.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "bugfix/#8302"]
    remote = origin
    merge = "refs/heads/bugfix/#8302"
[branch "feature/#8331"]
    remote = origin
    merge = "refs/heads/feature/#8331"
[remote "scm"]
    url = https://scm.xxx.be/git/web2016bs.git
    fetch = +refs/heads/*:refs/remotes/scm/*

Вы можете внести изменения в этот файл вручную, чтобы удалить ненужный пульт, или обновить пульты по умолчанию для разных ваших веток.

  • Обращать внимание! при изменении или удалении пульта убедитесь, что обновили все ссылки на него в этом конфигурационном файле
Ким Полиссен
источник
5

Другой метод, который я только что нашел для решения этой проблемы (даже если я сначала удалил источник, что кажется ошибкой) - это непосредственное управление git config:

git config remote.origin.url url-to-my-other-remote
alonisser
источник
5
Это не хорошее решение, пользователи git должны иметь возможность извлекать / выгружать из нескольких репозиториев - хотя это позволит вам изменить пульт ДУ оригинала, это не означает, что вы ДОЛЖНЫ изменить пульт ДУ оригинала, поскольку это, скорее всего, будет означать, что Есть ряд несовместимостей между пультами. Здесь поможет слияние, но оно и проще, и сохраняет больше истории для установки удаленного в новой ветке.
Смодеть
Не правильный способ сделать это ... @ Ответ Джордана более
уместен
1
См. Также: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Инон Эрлих
5

Очень просто, собрав вместе некоторые из замечательных комментариев, а также мои собственные исследования этого.

Сначала проверьте локальную ветку, которую вы хотите привязать к вашей удаленной ветке:

git checkout mybranch

Следующий:

git branch -u origin/mybranch

где:

git branch -u {remote name}/{branch name}

Вы должны получить сообщение:

"Branch mybranch set up to track remote branch mybranch from origin."
Artif3x
источник
3

В моем случае я исправил следующее: * run git config --edit * В файле конфигурации git:

[branch "master"]
remote = origin # <--- change the default origin here
Рон
источник
0

git remote set-url --push origin должно работать, как вы упомянули, но вам нужно явно указать URL вместо альтернативного удаленного имени, например

git remote set-url --push origin git@github.com:contributor/repo.git

Вы можете подтвердить это работает ли посредством производства git remote -v. Например

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    git@github.com:contributor/testify.git (fetch)
fork    git@github.com:contributor/testify.git (push)
origin  git@github.com:stretchr/testify (fetch)
origin  git@github.com:contributor/testify.git (push)
be_es
источник