Сделать существующий ветвь отслеживания Git удаленной ветвью?

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

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

2837
задан Pat Notz 06 февр. '09 в 18:14
источник поделиться
19 ответов

Для ветки foo и удаленного upstream:

Как Git 1.8.0:

git branch -u upstream/foo

Или, если локальная ветвь foo не является текущей ветвью:

git branch -u upstream/foo foo

Или, если вам нравится вводить более длинные команды, они эквивалентны следующим двум:

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

По состоянию на Git 1.7.0:

git branch --set-upstream foo upstream/foo

Примечания:

Все приведенные выше команды вызовут локальную ветвь foo для отслеживания удаленной ветки foo с удаленного upstream. Старый (1.7.x) синтаксис устарел в пользу нового синтаксиса (1.8+). Новый синтаксис предназначен для более интуитивного и более легкого запоминания.


См. также: Зачем мне все время делать` --set-upstream`?

3463
ответ дан Dan Moulding 18 февр. '10 в 6:06
источник поделиться

Вы можете сделать следующее (при условии, что вы выгружены на мастер и хотите нажать на удаленный мастер ветвления):

Настройте 'remote', если у вас его уже нет

# git remote add origin ssh://...

Теперь настройте мастера для отслеживания:

# git config branch.master.remote origin
# git config branch.master.merge refs/heads/master

И нажмите:

# git push origin master
197
ответ дан Paul Hedderly 09 марта '09 в 11:50
источник поделиться

Я делаю это как побочный эффект нажатия с опцией -u, как в

$ git push -u origin branch-name

Эквивалентная длинная опция --set-upstream.

Команда git-branch также понимает --set-upstream, но ее использование может ввести в заблуждение. Версия 1.8.0 изменяет интерфейс.

git branch --set-upstream устарел и может быть удален в относительно отдаленном будущем. git branch [-u|--set-upstream-to] был введен с более разумным порядком аргументов.

& hellip;

Было соблазнительно сказать git branch --set-upstream origin/master, но он сообщает Git упорядочить локальную ветвь "origin/master" для интеграции с текущей проверенной ветвью, что маловероятно для пользователя. Опция устарела; вместо этого используйте новый --set-upstream-to (с коротким и сладким -u).

Скажите, что у вас есть локальная ветвь foo и хотите, чтобы она обрабатывала ветвь с тем же именем, что и ее восходящий поток. Сделайте это с помощью

$ git branch foo
$ git branch --set-upstream-to=origin/foo

или просто

$ git branch --set-upstream-to=origin/foo foo
111
ответ дан Greg Bacon 02 окт. '12 в 19:24
источник поделиться

Вы можете найти инструмент git_remote_branch. Он предлагает простые команды для создания, публикации, удаления, отслеживания и переименования удаленных веток. Одна приятная особенность заключается в том, что вы можете запросить команду grb, чтобы объяснить, какие команды git она выполнит.

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch
48
ответ дан James Mead 06 февр. '09 в 20:11
источник поделиться

Собственно для принятого ответа на работу:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
46
ответ дан Hedgehog 23 нояб. '10 в 15:08
источник поделиться

Я считаю, что еще в Git 1.5.x вы можете сделать локальную ветвь $BRANCH отслеживать удаленную ветвь origin/$BRANCH, как это.

Учитывая, что существуют $BRANCH и origin/$BRANCH, и вы в настоящее время не проверили $BRANCH (отключайтесь, если есть):

git branch -f --track $BRANCH origin/$BRANCH

Это воссоздает $BRANCH как ветку отслеживания. -f заставляет создание, несмотря на уже существующее $BRANCH. --track является необязательным, если обычные значения по умолчанию установлены (то есть параметр git -config branch.autosetupmerge).

Обратите внимание, что если origin/$BRANCH еще не существует, вы можете создать его, нажав локальный $BRANCH в удаленный репозиторий с помощью:

git push origin $BRANCH

Следуя предыдущей команде, чтобы продвинуть локальную ветвь в ветку отслеживания.

37
ответ дан wu-lee 28 июля '10 в 12:33
источник поделиться

1- обновите локальные метаданные, используя: git fetch --all

введите описание изображения здесь

2- показать удаленные и локальные ветки, используя: git ветвь -a , см. следующий снимок экрана

введите описание изображения здесь

3- переключиться на целевую ветку, которую вы хотите связать с пультом дистанционного управления: используя

git checkout branchName

пример:

введите описание изображения здесь

4- Свяжите местную ветку с удаленной веткой, используя:

git branch --set-upstream-to nameOfRemoteBranch

N.B: nameOfRemoteBranch: скопировать с вывода шага 2 "git branch -r"

Пример использования:

введите описание изображения здесь

21
ответ дан Monsif EL AISSOUSSI 06 июня '16 в 17:21
источник поделиться

Убедитесь, что вы запустили:

git config push.default tracking

чтобы иметь возможность без проблем

20
ответ дан romanlv 30 авг. '11 в 0:38
источник поделиться

Редактирование .git/config, вероятно, является самым простым и быстрым способом. Это то, что делают команды Git для обработки удаленных веток.

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

Конечно, есть способы автоматически отслеживать удаленную ветку при использовании git checkout (например, передавая флаг --track), но эти команды работают с новыми ветвями, а не с уже существующими.

19
ответ дан mipadi 06 февр. '09 в 18:17
источник поделиться

В очень короткие

git branch --set-upstream yourLocalBranchName origin/develop

Это приведет к тому, что ваш yourLocalBranchName будет отслеживать удаленную ветвь с именем develop.

14
ответ дан MadNik 09 окт. '12 в 10:19
источник поделиться

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

grb track foo upstream

Это приведет к тому, что Git сделает foo дорожку upstream/foo.

12
ответ дан wik 01 июня '10 в 5:23
источник поделиться

Здесь, используя 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'

Так просто!


Резюме. Просто запустите следующие две команды:

$ git clone git@github.com:user/repo.git
$ git checkout develop
5
ответ дан Dr Beco 30 нояб. '15 в 2:04
источник поделиться
  • После git pull:

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

  • Или:

    git fetch && git checkout <branch-name>

3
ответ дан Loukan ElKadi 02 авг. '16 в 13:23
источник поделиться

Я использую следующую команду (Предположим, что вы ответите имя ветки "branch-name" ):

$ git branch --set-upstream-to=branch-name origin/branch-name
3
ответ дан bigO 22 дек. '15 в 12:46
источник поделиться

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

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

 git branch -u origin/remote-branch-name
3
ответ дан jithu reddy 20 апр. '17 в 13:24
источник поделиться

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

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

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

3
ответ дан Ville 05 окт. '15 в 9:10
источник поделиться

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

Будьте осторожны с push.default.

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

Локальное отслеживание ведущего устройства в начало/мастер

Отслеживание удаленной ветки "вверх по течению" для восходящего/основного

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

Это дает более разумное поведение:

git config --global push.default upstream

2
ответ дан Tom Mettam 21 мая '16 в 15:53
источник поделиться

или просто:

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

[za]$ git checkout branch_name

run

[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
1
ответ дан zee 07 окт. '16 в 19:20
источник поделиться

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

git branch --set-upstream-to=/< remote>/< branch> < localbranch>
0
ответ дан Abhi 22 июня '16 в 19:37
источник поделиться

Другие вопросы по меткам