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

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

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

Ответы [ 20 ]

4042 голосов
/ 18 февраля 2010

С учетом ветки 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`?

226 голосов
/ 09 марта 2009

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

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

git remote add origin ssh://...

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

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

И нажмите:

git push origin master
147 голосов
/ 02 октября 2012

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

Вам может пригодиться инструмент 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
50 голосов
/ 23 ноября 2010

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

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
42 голосов
/ 28 июля 2010

Я полагаю, что уже в 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 имеет значение true).

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

git push origin $BRANCH

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

32 голосов
/ 06 июня 2016

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

enter image description here

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

enter image description here

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

git checkout branchName

пример:

enter image description here

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

git branch --set-upstream-to nameOfRemoteBranch

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

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

enter image description here

22 голосов
/ 30 августа 2011

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

git config push.default tracking

чтобы можно было без проблем толкать

21 голосов
/ 06 февраля 2009

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

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

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

16 голосов
/ 09 октября 2012

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

git branch --set-upstream yourLocalBranchName origin/develop

Это заставит yourLocalBranchName отслеживать удаленную ветвь с именем develop.

...