Я знаю, как создать новую ветку, которая отслеживает удаленные ветки, но как сделать существующий ответвление ветки удаленной ветвью?
Я знаю, что могу просто отредактировать файл .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:
git branch --set-upstream foo upstream/foo
Заметки:
foo
отслеживать удаленную ветку foo
из удаленного upstream
.git fetch upstream
заранее.Смотрите также: Почему я должен делать '--set-upstream' все время?
Вы можете сделать следующее (при условии, что вы извлечены на ведущем устройстве и хотите отправить его на удаленный ведущий филиал):
Настройте "пульт", если у вас его еще нет
git remote add origin ssh://...
Теперь настройте мастер, чтобы знать, чтобы отслеживать:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
И нажмите:
git push origin master
Я делаю это как побочный эффект нажатия с опцией -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
Вы можете найти инструмент 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
Собственно для принятого ответа на работу:
git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
Я считаю, что еще в 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
Следуя предыдущей команде, чтобы продвинуть локальную ветвь в ветку отслеживания.
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"
Пример использования:
Убедитесь, что вы запустили:
git config push.default tracking
чтобы иметь возможность без проблем
Редактирование .git/config
, вероятно, является самым простым и быстрым способом. Это то, что делают команды Git для обработки удаленных веток.
Если вы не хотите гадости с файлом вручную (и это не так сложно сделать), вы всегда можете использовать git config
для этого... но опять же, это просто редактирование .git/config
файл, в любом случае.
Конечно, есть способы автоматически отслеживать удаленную ветку при использовании git checkout
(например, передавая флаг --track
), но эти команды работают с новыми ветвями, а не с уже существующими.
В очень короткие
git branch --set-upstream yourLocalBranchName origin/develop
Это приведет к тому, что ваш yourLocalBranchName
будет отслеживать удаленную ветвь с именем develop
.
Для 1.6.x это можно сделать с помощью инструмента git_remote_branch:
grb track foo upstream
Это приведет к тому, что Git сделает foo
дорожку upstream/foo
.
Я использую следующую команду (предположим, что ваше локальное имя ветки - "имя-ветки-локальное", а имя удаленной ветки - "имя-ветки-удаленное"):
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
Если и локальная, и удаленная ветки имеют одно и то же имя, просто выполните следующее:
$ git branch --set-upstream-to=origin/branch-name branch-name
Здесь, используя 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
После git pull
:
git checkout --track <remote-branch-name>
Или же:
git fetch && git checkout <branch-name>
Для создания новой ветки мы можем использовать следующую команду
git checkout --track -b example origin/exampleДля уже созданного ветки для создания связи между удаленным, а затем из этой ветки используйте следующую команду
git branch -u origin/remote-branch-name
Это не прямой ответ на этот вопрос, но я хотел оставить примечание для всех, у кого может быть такая же проблема, как и я, когда пытаюсь настроить ветвь вверх по течению.
Будьте осторожны с push.default.
С более старыми версиями git по умолчанию было соответствие, что вызвало бы очень нежелательное поведение, если у вас есть, например:
Локальное отслеживание ведущего устройства в начало/мастер
Отслеживание удаленной ветки "вверх по течению" для восходящего/основного
Если вы попытались "git нажимать", когда в ветке "вверх по течению" с сопоставление push.default git будет автоматически пытаться объединить локальный ветвь "master" в "upstream" /master ", вызывая много хаоса.
Это дает более разумное поведение:
git config --global push.default upstream
В некотором роде я пытался добавить удаленную ветку отслеживания в существующую ветку, но не имел доступа к этому удаленному репозиторию в системе, где я хотел добавить эту ветку удаленного отслеживания (потому что я часто экспортирую копия этого репо через sneakernet в другую систему, которая имеет доступ к push на этот пульт). Я обнаружил, что не было никакого способа принудительно добавить удаленную ветвь на локальную, которая еще не была извлечена (так что локальный не знал, что ветвь существует на удаленном компьютере, и я бы получил ошибку: the requested upstream branch 'origin/remotebranchname' does not exist
).
В итоге мне удалось добавить новую, ранее неизвестную удаленную ветку (без выборки), добавив новый файл заголовка в .git/refs/remotes/origin/remotebranchname
, а затем скопировав ref (глазное яблоко было самым быстрым, хромым, как это было;-) из системы с доступом к исходному репо на рабочую станцию (с локальным репо, в которое я добавлял удаленную ветку).
Как только это было сделано, я мог бы использовать 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
Вы можете alawys взглянуть на файл конфигурации, чтобы увидеть, что отслеживает, запустив:
[za]$ git config -e
Также приятно это знать, он показывает, какие ветки отслеживаются, а какие нет. :
[za]$ git remote show origin
Для тех, кто, как и я, просто хочет синхронизировать имя вашей локальной ветки с именем удаленной ветки, вот удобная команда:
git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
Это тоже сработает
git branch --set-upstream-to=/< remote>/< branch> < localbranch>