Сделать существующую ветку Git отслеживать удаленную ветку?
Я знаю, как сделать новую ветку, которая отслеживает удаленные ветви, но Как сделать существующую ветку отслеживать удаленную ветку?
Я знаю, что могу просто редактировать .git/config
файл, но, похоже, должен быть более простой способ.
19 ответов
учитывая филиала 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+) синтаксиса. Новый синтаксис предназначен для более интуитивного и простого запоминания.
Читайте также: почему мне нужно делать `--set-upstream` все время?
вы можете сделать следующее (предполагая, что вы проверены на master и хотите нажать на удаленный мастер ветви):
настройте "удаленный", если у вас его еще нет
git remote add origin ssh://...
Теперь настройте master, чтобы знать, чтобы отслеживать:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
и нажмите:
git push origin master
я делаю это как побочный эффект сталкивания с а в
$ git push -u origin branch-name
эквивалентный длинный вариант ---set-upstream
.
на ) вариант.
скажем, у вас есть местные foo
ветвь и хотите, чтобы она обрабатывала ветвь тем же именем, что и ее вверх по течению. Это произошло с
$ git branch foo
$ git branch --set-upstream-to=origin/foo
или просто
$ git branch --set-upstream-to=origin/foo foo
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
exist, и вы в настоящее время не проверили $BRANCH
(выключите, если есть), сделайте:
git branch -f --track $BRANCH origin/$BRANCH
это воссоздает $BRANCH
как ветвь отслеживания. The -f
силы творения, несмотря на $BRANCH
существующие уже. --track
является необязательным, если установлены обычные значения по умолчанию (то есть git-config параметр branch.autosetupmerge
- это правда).
обратите внимание, если origin/$BRANCH
еще не существует, вы можете создать его, нажав локальном $BRANCH
в удаленный репозиторий с:
git push origin $BRANCH
затем следует предыдущая команда для продвижения локальной ветви в ветку отслеживания.
1-обновите свои локальные метаданные с помощью:git fetch --all
2-показать удаленные и локальные ветви с помощью:git branch-a , смотрите следующий скриншот
3-переключитесь на целевую ветвь, которую вы хотите связать с пультом дистанционного управления: используя
Git в кассе 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
.
здесь github
и git version 2.1.4
, просто сделать:
$ git clone git@github.com:user/repo.git
и пульты приходят itelsef, даже если они не связаны локально:
$ git remote show origin
* remote origin
Fetch URL: git@github.com:user/repo.git
Push URL: git@github.com: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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
посмотреть? Теперь, если вы просто проверить develp, он будет делать магию автоматически:
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
так легко!
резюме. просто запустите эти 2 команды:
$ git clone git@github.com:user/repo.git
$ git checkout develop
использовать опцию '--track'
-
после
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
несколько связанным образом я пытался добавить ветку удаленного отслеживания в существующую ветку, но не имел доступа к этому удаленному репозиторию в системе, где я хотел добавить эту ветку удаленного отслеживания (потому что я часто экспортирую копию этого РЕПО через sneakernet в другую систему, которая имеет доступ к этому удаленному). Я обнаружил, что нет никакого способа принудительно добавить удаленную ветвь на локальную, которая еще не была извлечена (поэтому local не знал, что ветвь существует на пульте и я бы получил ошибку:the requested upstream branch 'origin/remotebranchname' does not exist
).
В конце концов мне удалось добавить новую, ранее неизвестную удаленную ветку (без извлечения), добавив новый файл head в .git/refs/remotes/origin/remotebranchname
а затем копирование ref (eyeballing было самым быстрым, хромым, как это было ;-) из системы с доступом к исходному РЕПО на рабочую станцию (с локальным РЕПО, где я добавлял удаленную ветку).
как только это было сделано, я мог бы затем использовать git branch --set-upstream-to=origin/remotebranchname
Я использую следующую команду (предположим, что ваше локальное имя ветви - "branch-name-local", а удаленное имя ветви - "branch-name-remote"):
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
если и локальная, и удаленная ветви имеют одинаковое имя, то просто сделайте следующее:
$ git branch --set-upstream-to=origin/branch-name branch-name
Это не прямой ответ на этот вопрос, но я хотел бы оставить здесь заметку для всех, у кого может быть такая же проблема, как у меня при попытке настроить восходящую ветку.
будьте осторожны пуш.по умолчанию.
с более старыми версиями git по умолчанию было соответствующего, что вызовет очень нежелательное поведение, если у вас есть, например:
отслеживание локальной ветви "master" до origin / master
удаленную ветку "апстрим" для отслеживания исходящего/мастер
Если вы пытались "git push", когда на ветке "вверх по течению", с пуш.соответствие по умолчанию git автоматически попытается объединить локальную ветвь " master "в" upstream/master", вызвав целый хаос.
Это дает более разумное поведение:
git config --глобальный толчок.вверх по умолчанию
или просто :
переключитесь на ветку, если вы еще не находитесь в ней:
[za]$ git checkout branch_name
run
[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