Сделать существующую ветку 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


собственно для принятого ответа на работу:

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

enter image description here

2-показать удаленные и локальные ветви с помощью:git branch-a , смотрите следующий скриншот

enter image description here

3-переключитесь на целевую ветвь, которую вы хотите связать с пультом дистанционного управления: используя

Git в кассе branchName

пример :

enter image description here

4-свяжите локальную ветку с удаленной веткой, используя:

git branch --set-upstream-to nameOfRemoteBranch

N. B:nameOfRemoteBranch: скопировать с выхода шага 2 "git branch-r"

пример использования:

enter image description here


убедитесь, что вы запустите :

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 

Это тоже сработает

git branch --set-upstream-to=/< remote>/< branch> < localbranch>