Отслеживайте новую удаленную ветку, созданную на GitHub

183

У меня уже есть локальная главная ветка, отслеживающая удаленную главную ветку проекта github. Теперь мой сотрудник создал новую ветвь в том же проекте, и я хочу сделать следующее:

  1. создать новую ветку локально
  2. сделайте эту новую ветку отслеживающей вновь созданную удаленную ветку.

Как я должен сделать это правильно?

MLister
источник
2
git checkout --track -b <локальная ветка> <удаленная> / <отслеживаемая ветка> также работает.
MLister
14
... или просто git checkout -t <remote>/<whatever>. Если есть только одна ветвь удаленного отслеживания, которая заканчивается на <whatever>вас, вы можете просто сделать git checkout <whatever>и угадайте, что вы имеете в виду.
Марк Лонгэйр

Ответы:

251
git fetch
git branch --track branch-name origin/branch-name

Первая команда гарантирует, что у вас есть удаленная ветвь в локальном хранилище. Вторая команда создает локальную ветку, которая отслеживает удаленную ветку. Предполагается, что ваше удаленное имя originи ветвь имя branch-name.

--track опция включена по умолчанию для удаленных филиалов, и вы можете опустить ее.

Максимум
источник
3
Когда я делаю это, я получаю предупреждение: refname 'branch-name' является неоднозначным.
Ультрасавр
19
Если существует только одна удаленная ветка с таким именем, вы можете просто сделать это, git checkout <branchname>и git автоматически проверит ее и настроит отслеживающую ветку. Просто хотел повторить то, что @Mark Longair сказал выше в этом комментарии: stackoverflow.com/questions/11262703/… .
Райан Уоллс
Название моей удаленной ветки есть remotes/origin/develop? Разве это не должно быть просто origin/develop? Это одно и то же?
ス レ ッ ク ス
2
Я должен был сделать git fetch --all, иначе новые ветви не были бы
выбраны
Как это сделать в Eclipse? Когда я закончу с этим cmd, затмение обнаружит новую ветвь?
Декард
31

Если у вас нет локальной ветки, это действительно так просто:

git fetch
git checkout <remote-branch-name>

Например, если вы получаете и появляется новая ветка удаленного отслеживания origin/feature/Main_Page, просто сделайте это:

git checkout feature/Main_Page

Это создает локальную ветвь с тем же именем, что и удаленная ветвь, отслеживая эту удаленную ветвь. Если у вас есть несколько пультов с одним и тем же именем филиала, вы можете использовать менее двусмысленное:

git checkout -t <remote>/<remote-branch-name>

Если вы уже создали локальную ветку и не хотите ее удалять, см. Как сделать так, чтобы существующая ветка Git отслеживала удаленную ветку? ,

kotoole
источник
1
git checkout 1.5-branch( remotes/upstream/1.5-branchнаходится в выходных данных git branch -a) приводит к error: pathspec '1.5-branch' did not match any file(s) known to git.изменению этого значения, что git checkout upstream/1.5-branchприводит к отключению HEAD, и локальная ветвь не создается. Я думаю, что эта часть ответа просто неверна. Это с мерзавцем 2.4.3
Петр Доброгост
Первая команда у меня работает в git 1.9.3 даже для разных пультов. Возможно, это поведение изменилось. Результат вашей второй команды - это то, что я ожидал. Без -t вы не указываете, что хотите делать что-то кроме просмотра конкретной версии на пульте.
котооль
1
Я согласен с @PiotrDobrogost, я считаю, что ваше утверждение «Это создает локальную ветвь с тем же именем ...» ошибочно. Что будет делать выборка (когда она вызывается таким образом) - это создание удаленной ветви отслеживания для каждой ветви на удаленной станции. Это означает, что ветка в вашем локальном репо называется <remote>/<branch>. Удаленная ветвь отслеживания доступна только для чтения, указывая, где эта ветвь была на удаленной при последней загрузке. Вызов checkoutэтой ветки ref переводит вас в режим HEAD, как говорит Петр. Обратите внимание, что указание удаленной ветви для выборки позволяет избежать создания нежелательных удаленных ветвей отслеживания.
сканни
2
Чтобы было еще раз ясно: я предлагаю использовать команду git checkout feature-branch. Я НЕ предлагаю использовать команду, git checkout origin/feature-branch которая, как вы оба указали, приведет к бесполезной отстраненной голове.
kotoole
гораздо проще и по сути. Прекрасно работает с git 2.8.3 на cygwin.
Фелипе Альварес
29

Прежде всего, вам нужно получить удаленный репозиторий:

git fetch remoteName

Затем вы можете создать новую ветку и настроить ее для отслеживания удаленной ветки, которую вы хотите:

git checkout -b newLocalBranch remoteName/remoteBranch

Вы также можете использовать "git branch --track" вместо "git checkout -b", как указано max.

git branch --track newLocalBranch remoteName/remoteBranch
Ангел Контиу
источник
Если вы checkout -bиспользуете удаленную ветвь в качестве отправной точки, то на самом деле ее не нужно использовать --track.
5
Кроме того, как указано в этом комментарии , если вы просто сделаете это git checkout <branchname>, и есть удаленная ветвь с тем же именем (после того, как вы сделали a git fetch), то локальная ветвь будет автоматически настроена для отслеживания удаленной.
9

Когда филиал не является удаленным филиалом, вы можете направить свой локальный филиал непосредственно к удаленному.

git checkout master
git push origin master

или когда у вас есть ветка разработчика

git checkout dev
git push origin dev

или когда существует удаленная ветвь

git branch dev -t origin/dev

Существуют и другие возможности подтолкнуть удаленную ветвь.

Рене Хёле
источник
Тогда вы берете третий вариант. Когда удаленная ветвь существует, вы можете создать локальную ветвь и отследить удаленную ветку :) Она такая же, как версия от max, но короче.
Рене Хёле