Я знаю, как создать новую ветку, которая отслеживает удаленные ветки, но как сделать так, чтобы существующая ветка отслеживала удаленную ветку?
Я знаю, что могу просто отредактировать .git/config файл, но, похоже, должен быть более простой способ.
Я знаю, как создать новую ветку, которая отслеживает удаленные ветки, но как сделать так, чтобы существующая ветка отслеживала удаленную ветку?
Я знаю, что могу просто отредактировать .git/config файл, но, похоже, должен быть более простой способ.
Учитывая ветку 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 (до 1.8.0):
git branch --set-upstream foo upstream/foo
Примечания:
foo отслеживать удаленную ветку foo с удаленного upstream.git fetch upstream.См. Также: Почему мне все время нужно выполнять `--set-upstream`?
git
- person Eugene; 15.01.2013
foo работает у меня, не пробуйте другие.
- person John E; 18.02.2019
git branch -u upstream/foo
- person hukeping; 06.10.2019
git branch -u origin/branch_name, отслеживающая _2_ удаленного. _3_ и _4_ не работают, но длинный _5_ работает.
- person Taras Melnyk; 11.06.2020
Вы можете сделать следующее (при условии, что вы зарегистрированы на главном сервере и хотите отправить его на удаленный мастер ветки):
Настройте «пульт», если у вас его еще нет
git remote add origin ssh://...
Теперь настройте мастер, чтобы он знал, что нужно отслеживать:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
И нажимаем:
git push origin master
error: the requested upstream branch 'upstream/master' does not exist, а не _2_.
- person Steve K; 14.05.2014
Я делаю это как побочный эффект нажатия с опцией -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]был введен с более разумным порядком аргументов.Заманчиво было сказать
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 1.8.0 и выше:
$ git branch --set-upstream-to=origin/foo foo
Собственно, чтобы принятый ответ работал:
Возможно, вам пригодится инструмент git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR Git version 1.8.0 and higher:
git branch --set-upstream-to=upstream/qa
# Gitversions lower than 1.8.0
git branch --set-upstream qa upstream/qa
. Он предлагает простые команды для создания, публикации, удаления, отслеживания и переименования удаленных веток. Одна приятная особенность заключается в том, что вы можете попросить команду _2_ объяснить, какие команды git она будет выполнять.
git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR Git version 1.8.0 and higher:
git branch --set-upstream-to=upstream/qa
# Gitversions lower than 1.8.0
git branch --set-upstream qa upstream/qa
Я считаю, что уже в Git 1.5.x вы могли заставить локальную ветку git_remote_branch отслеживать удаленную ветку grb, как это.
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
Учитывая, что $BRANCH и origin/$BRANCH существуют, и в настоящее время вы не выписали $BRANCH (отключите, если есть), выполните:
Это воссоздает $BRANCH как ветку отслеживания. -f форсирует создание, несмотря на то, что $BRANCH уже существует. --track является необязательным, если используются обычные значения по умолчанию (то есть параметр git-config branch.autosetupmerge имеет значение true).
git branch -f --track $BRANCH origin/$BRANCH
Обратите внимание: если origin/$BRANCH еще не существует, вы можете создать его, поместив свой локальный $BRANCH в удаленный репозиторий с помощью:
За ней следует предыдущая команда, чтобы превратить локальную ветвь в ветвь отслеживания.
git push origin $BRANCH
1- обновите свои локальные метаданные, используя: git fetch --all
git push origin $BRANCH делает свое дело.
- person User; 02.04.2013
2- покажите удаленную и локальную ветки, используя: git branch -a, см. Следующий снимок экрана.
3- переключитесь на целевую ветку, которую вы хотите связать с пультом дистанционного управления: используя
git checkout branchName
пример :
4- Свяжите локальную ветку с удаленной веткой, используя:
git branch --set-upstream-to nameOfRemoteBranch
Примечание: nameOfRemoteBranch: для копирования из вывода шага 2 «git branch -r»
Пример использования:
Убедитесь, что вы запустили:
чтобы быть в состоянии избавиться от проблем
git config push.default tracking
Редактирование
git config push.default tracking
, вероятно, самый простой и быстрый способ. Во всяком случае, это то, что делают команды Git для обработки удаленных веток.
git-config(1) (или tracking)
- person FooF; 08.08.2012
Если вы не хотите портить файл вручную (и это не так уж сложно), вы всегда можете использовать git config для этого ... но опять же, это просто отредактирует файл .git/config, в любом случае.
Конечно, есть способы автоматического отслеживания удаленной ветки при использовании git checkout (например, путем передачи флага --track), но эти команды работают с новыми ветвями, а не с существующими.
Очень коротко
Это заставит ваш yourLocalBranchName отслеживать удаленную ветку с именем develop.
git branch --set-upstream yourLocalBranchName origin/develop
Для 1.6.x это можно сделать с помощью инструмента git_remote_branch:
git push -u origin branch и --set-upstream-to? Я не совсем понимаю, почему я должен использовать одно вместо другого.
- person Tobias Kienzler; 28.05.2013
Это заставит Git сделать foo трек upstream/foo.
grb track foo upstream
Я использую следующую команду (предположим, что имя вашей локальной ветки - «имя-ветки-локальное», а имя удаленной ветки - «имя-ветки-удаленное»):
Если и локальная, и удаленная ветки имеют одинаковое имя, просто сделайте следующее:
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
Здесь, используя
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
и $ git branch --set-upstream-to=origin/branch-name branch-name
, просто выполните:
$ git branch --set-upstream-to=origin/branch-name branch-name
И пульты поставляются itelsef, даже если они не связаны локально:
$ git clone [email protected]:user/repo.git
Но, конечно же, местного филиала по-прежнему нет:
$ 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)
Видеть? Теперь, если вы просто проверяете develp, он автоматически творит чудеса:
$ git branch
* master <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Так просто!
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
Сводка. Просто выполните две команды:
После github:
$ git clone [email protected]:user/repo.git
$ git checkout develop
Используйте параметр --track
git checkout --track <remote-branch-name>
Or:
git fetch && git checkout <branch-name>
Остерегайтесь push.default.
В более старых версиях git по умолчанию использовалось соответствие, что могло бы вызвать очень нежелательное поведение, например, если у вас есть:
Отслеживание "главного" местного филиала до источника / хозяина
Отслеживание удаленного ответвления "восходящего направления" до восходящего / главного
Если вы попытались выполнить «git push» в ветке «upstream», с соответствием push.default, git автоматически попытается объединить локальную ветку «master» с «upstream / master», что приведет к целому много хаоса.
Это дает более разумное поведение:
git config --global push.default восходящий поток
Для git версии _1_ используйте команду:
В некотором роде я пытался добавить ветку удаленного отслеживания в существующую ветку, но не имел доступа к этому удаленному репозиторию в системе, куда я хотел бы добавить эту ветку удаленного отслеживания (потому что я часто экспортирую копию этого репо через sneakernet в другую систему, у которой есть доступ для отправки на этот удаленный компьютер). Я обнаружил, что не было возможности принудительно добавить удаленную ветку на локальном, которая еще не была извлечена (поэтому локальный не знал, что ветка существует на удаленном, и я получил бы сообщение об ошибке: 2.25.1).
git push --set-upstream origin <local_branch_name>
В конце концов мне удалось добавить новую, ранее неизвестную удаленную ветку (без извлечения), добавив новый файл заголовка в .git/refs/remotes/origin/remotebranchname, а затем скопировав ссылку (просмотр был самым быстрым, хотя и неубедительным ;-) из системы с доступом к origin репо на рабочую станцию (с локальным репо, куда я добавлял удаленную ветку).
Как только это будет сделано, я смогу использовать git branch --set-upstream-to=origin/remotebranchname
или просто:
переключитесь в ветку, если вы еще не в ней:
запустить
[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
Это также приятно знать, это показывает, какие ветки отслеживаются, а какие нет. :
[za]$ git config -e
Для тех, кто, как и я, просто хочет синхронизировать имя вашей локальной ветки с именем удаленной ветки, вот удобная команда:
[za]$ git remote show origin
Чтобы не запоминать, что вам нужно делать каждый раз, когда вы получаете сообщение:
git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
Пожалуйста, укажите, с какой веткой вы хотите объединиться. Подробнее см. Git-pull (1)
.
.....
Вы можете использовать следующий скрипт, который устанавливает источник как восходящий для текущей ветви, в которой вы находитесь.
В моем случае я почти никогда не устанавливаю что-то еще, кроме источника в качестве восходящего потока по умолчанию. Также я почти всегда сохраняю одно и то же имя ветки для локальной и удаленной ветки. Так что мне подходит следующее:
Это тоже сработает
#!/bin/bash
# scriptname: git-branch-set-originupstream
current_branch="$(git branch | grep -oP '(?<=^\* )(.*)$')"
upstream="origin/$current_branch"
git branch -u "$upstream"
Как указано ниже, для существующей ветки вы можете использовать
git branch --set-upstream-to=/< remote>/< branch> < localbranch>
.
git branch --set-upstream-to=/< remote>/< branch> < localbranch>
git push -u origin branch-nameчасто будет предоставлять полезные сообщения о соответствующей команде для установки информации отслеживания. - person Zags   schedule 07.03.2014git branch --set-upstream-to origin/<branch>выдает ошибку: _2_ поэтому _3_ - текущая команда, которая работает. - person Mahdi Javaheri   schedule 18.09.2017--set-upstream: мне нужно было добавить новое удаленное отслеживание существующей ветки, что я решил с помощьюfatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead., а затемgit branch --set-upstream-to origin/<branch name>. Работает с _4_. _5_ предназначен для _6_, так как _7_ согласно _8_ - person Super Jade   schedule 24.08.2018