Сделать существующую ветку Git отслеживающей удаленную ветку? - PullRequest
3321 голосов
/ 06 февраля 2009

Я знаю, как создать новую ветку, которая отслеживает удаленные ветви, но , как мне сделать существующую ветку, отслеживающую удаленную ветку?

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

Ответы [ 20 ]

14 голосов
/ 01 июня 2010

Для 1.6.x это можно сделать с помощью инструмента git_remote_branch :

grb track foo upstream

Это заставит Git создать foo дорожку upstream/foo.

9 голосов
/ 02 августа 2016

Использовать опцию --track

  • После git pull:

    git checkout --track <remote-branch-name>

  • Или:

    git fetch && git checkout <branch-name>

8 голосов
/ 22 декабря 2015

Я использую следующую команду (предположим, что ваше локальное имя ветви - «имя-ветви-локальное», а имя удаленной ветви - «имя-ветви-удаленное»):

$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local

Если и локальная, и удаленная ветви имеют одно и то же имя, просто выполните следующее:

$ git branch --set-upstream-to=origin/branch-name branch-name
8 голосов
/ 30 ноября 2015

Здесь, используя github и git version 2.1.4, просто сделайте:

$ git clone git@github.com:user/repo.git

И пульты поставляются itelsef, даже если они не связаны локально:

$ git remote show origin

* remote origin
  Fetch URL: git@github.com:user/repo.git
  Push  URL: git@github.com:user/repo.git
  HEAD branch: master
  Remote branches:
    develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Но, конечно, по-прежнему нет местного отделения:

$ git branch
* master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

См? Теперь, если вы просто оформите заказ, он автоматически сделает волшебство:

$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

Так просто!


Сводка. Просто запустите эти 2 команды:

$ git clone git@github.com:user/repo.git
$ git checkout develop
6 голосов
/ 20 апреля 2017

Для создания новой ветки мы могли бы использовать следующую команду

 git checkout --track -b example origin/example 
Чтобы уже созданная ветка создала связь между удаленными и затем из этой ветки, используйте команду ниже

 git branch -u origin/remote-branch-name
4 голосов
/ 21 мая 2016

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

Остерегайтесь push.default .

В более старых версиях git значением по умолчанию было match , что могло бы привести к очень нежелательному поведению, если у вас есть, например:

Локальная ветка "master", отслеживающая источник / master

Удаленное отслеживание "восходящей" ветки к восходящей / главной

Если вы попытались "git push" в ветке "upstream", с push.default match git автоматически попытается объединить локальную ветку "master" в "upstream / master", вызывая целый хаос.

Это дает более вменяемое поведение:

git config --global push.default upstream

4 голосов
/ 05 октября 2015

В некотором роде я пытался добавить ветку удаленного отслеживания в существующую ветку, но у меня не было доступа к этому удаленному репозиторию в системе, где я хотел добавить эту ветку удаленного отслеживания (потому что я часто экспортирую скопируйте этот репозиторий через sneakernet в другую систему, которая имеет доступ к этому удаленному устройству). Я обнаружил, что не было никакого способа принудительно добавить удаленную ветвь в локальную, которая еще не была выбрана (поэтому локальная не знала, что ветвь существовала на удаленной, и я получил бы ошибку: the requested upstream branch 'origin/remotebranchname' does not exist).

В конце концов мне удалось добавить новую, ранее неизвестную удаленную ветвь (без извлечения), добавив новый заголовочный файл на .git/refs/remotes/origin/remotebranchname и затем скопировав ссылку (глазное движение было самым быстрым, как бы хромым ;-) из система с доступом к исходному репо на рабочую станцию ​​(с локальным репо, на котором я добавлял удаленную ветку).

Как только это будет сделано, я смогу использовать git branch --set-upstream-to=origin/remotebranchname

3 голосов
/ 07 октября 2016

или просто:

переключиться на ветку, если вы еще не в ней:

[za]$ git checkout branch_name

пробег

[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.

и вы готовы:

 [za]$ git push origin branch_name

Вы можете alawys взглянуть на файл конфигурации, чтобы узнать, что именно отслеживает, запустив:

 [za]$ git config -e

Приятно также знать это, оно показывает, какие ветви отслеживаются, а какие нет. :

  [za]$ git remote show origin 
1 голос
/ 26 февраля 2019

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

git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
0 голосов
/ 22 июня 2016

Это бы тоже сработало

git branch --set-upstream-to=/< remote>/< branch> < localbranch>
...