Вопрос по github, git, git-branch – Отслеживание новой удаленной ветки, созданной на GitHub

159

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

create a new branch locally make this new branch track the newly create remote branch.

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

... или простоgit checkout -t <remote>/<whatever>, Если существует только одна ветвь удаленного отслеживания, которая заканчивается<whatever> Вы можете даже просто сделатьgit checkout <whatever> и мерзавец догадывается, что ты имеешь в виду. Mark Longair
git checkout --track -b & lt; местное отделение & gt; & lt; удаленная & gt; / & lt; отслеживаемая ветвь & gt; тоже работает. MLister

Ваш Ответ

4   ответа
224
git fetch
git branch --track branch-name origin/branch-name

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

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

Я должен был сделатьgit fetch --allиначе новые ветки не будут выбраны
Когда я это делаю, я получаю предупреждение: refname & apos; branch-name & apos; неоднозначно.
Если есть только одна удаленная ветвь с таким именем, вы можете просто сделатьgit checkout <branchname> и git автоматически проверит это и установит ветку отслеживания. Просто хотел повторить то, что @Mark Longair сказал выше в этом комментарии:stackoverflow.com/questions/11262703/….
Название моей удаленной веткиremotes/origin/develop? Разве это не должно быть простоorigin/develop? Это одно и то же?
7

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

git checkout master
git push origin master

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

git checkout dev
git push origin dev

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

git branch dev -t origin/dev

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

Благодарю. Но я не думаю, что хочу «нажать удаленную ветку»; Вот... MLister
Тогда вы берете третий вариант. Когда удаленная ветвь существует, вы можете создать локальную ветвь и отследить удаленную ветку :) Она такая же, как версия от max, но короче.
27

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

git fetch
git checkout <remote-branch-name>

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

git checkout feature/Main_Page

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

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

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

Первая команда у меня работает в git 1.9.3, даже для разных пультов. Возможно, это поведение изменилось. Результат вашей второй команды - это то, что я ожидал. Без -t вы не указываете, что хотите делать что-то кроме просмотра конкретной версии на пульте.
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 checkout feature-branch, Я НЕ предлагаю использовать командуgit checkout origin/feature-branch   что, как вы оба отметили, приведет к бесполезной отстраненной голове.
гораздо проще и по сути. Прекрасно работает с git 2.8.3 на cygwin.
Я согласен с @PiotrDobrogost, я полагаю, что ваше утверждение "Это создает локальную ветвь с тем же именем ..." ошибся Что за выборкаwill сделать (когда называется так) создатьremote tracking branch для каждой ветки на пульте. Это означает, что ветка в вашем локальном репо с именем<remote>/<branch>, Удаленная ветвь отслеживания доступна только для чтения, что указывает на то, где эта ветка была удаленной при последней загрузке. призваниеcheckout в этой ветке ссылка переводит вас в режим HEAD, как говорит Петр. Обратите внимание, что указание удаленной ветви для выборки позволяет избежать создания нежелательных удаленных ветвей отслеживания.
28

git fetch remoteName

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

git checkout -b newLocalBranch remoteName/remoteBranch

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

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

Похожие вопросы