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

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

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

Ответы

Ответ 1

Учитывая ветку 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+) синтаксиса. Новый синтаксис должен быть более интуитивным и более простым для запоминания.
  • Определение восходящего потока не удастся с вновь созданными удаленными, которые не были выбраны. В этом случае запустите git fetch upstream заранее.

Смотрите также: Почему я должен делать '--set-upstream' все время?

Ответ 2

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

Настройте "пульт", если у вас его еще нет

git remote add origin ssh://...

Теперь настройте мастер, чтобы знать, чтобы отслеживать:

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

И нажмите:

git push origin master

Ответ 3

Я делаю это как побочный эффект нажатия с опцией -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

Ответ 4

Вы можете найти инструмент 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

Ответ 5

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

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa

Ответ 6

Я считаю, что еще в 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

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

Ответ 7

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"

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

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

Ответ 8

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

git config push.default tracking

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

Ответ 9

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

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

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

Ответ 10

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

git branch --set-upstream yourLocalBranchName origin/develop

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

Ответ 11

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

grb track foo upstream

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

Ответ 12

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

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

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

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

Ответ 13

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

$ git clone [email protected]:user/repo.git

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

$ git remote show origin

* remote origin
  Fetch URL: [email protected]:user/repo.git
  Push  URL: [email protected]: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 [email protected]:user/repo.git
$ git checkout develop

Ответ 14

Используйте опцию '--track'

  • После git pull:

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

  • Или же:

    git fetch && git checkout <branch-name>

Ответ 15

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

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

 git branch -u origin/remote-branch-name

Ответ 16

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

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

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

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

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

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

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

git config --global push.default upstream

Ответ 17

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

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

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

Ответ 18

или просто:

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

[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 

Ответ 19

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

git branch -u origin/$(git rev-parse --abbrev-ref HEAD)

Ответ 20

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

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