2009-04-30 2 views
125

Я принял следующие шаги:Как скопировать локальный филиал Git на удаленный репозиторий

  1. клонировал удаленный Git репо
  2. Разветвленных мастер ветвь экспериментального
  3. отредактированных/проверенный/зафиксированный код в экспериментальной ветке

Теперь я не готов объединить экспериментальные данные в мастер. Однако я хочу вернуть его обратно в удаленное репо, поскольку это репозиторий, который я разделяю несколькими коллегами. Я бы хотел, чтобы они увидели, что я сделал в экспериментальной ветке. Обычно я просто получаю доступ к удаленному репо через SSH.

Как разделить локальную ветвь на удаленном репо, не затрагивая главную ветвь удаленного репо?

+0

Эта ссылка также очень полезно в этом аспекте. [Совместное использование ветвей git] (http://allmybrain.com/2008/09/15/sharing-git-branches/) –

+0

Возможный дубликат [Как вы делаете существующий ветвь ветки git удаленной ветвью?] (Http: //stackoverflow.com/questions/520650/how-do-you-make-an-existing-git-branch-track-a-remote-branch) – ahsteele

ответ

155

По git push manual page:

git push origin experimental 

Найти реф, который соответствует experimental в исходный репозиторий (скорее всего, он найдет refs/heads/experimental) и обновит тот же ref (например, refs/heads/experimental) в исходном репозитории с ним.
Если experimental не существует удаленно, он будет создан.

Это то же самое, как:

git push origin experimental:refs/heads/experimental 

Создать филиал experimental в хранилище происхождения путем копирования текущего experimental ветвь.
Эта форма нужна только для создания новой ветки или тега в удаленном репозитории, когда локальное имя и удаленное имя различаются; в противном случае имя ссылки будет работать.

Или, как упоминалось в git tip, вы можете установить «по умолчанию филиала Remote» A:

Вы можете использовать Git конфигурации, чтобы назначить по умолчанию пульт дистанционного управления для данной отрасли. Этот пульт по умолчанию будет использоваться для перемещения этой ветви, если не указано иное.

Это уже сделано для вас, когда вы используете git clone, позволяя использовать git push без каких-либо аргументов, чтобы нажать локальную ветвь мастера, чтобы обновить основную ветку исходного хранилища.

git config branch.<name>.remote <remote> 

можно использовать для указания вручную.


Jan предлагает (для git >= 1.7.0) вариант push -u (или push --set-upstream):

Для каждой отрасли, которая до настоящего времени или успешно толкаемом, добавить вверх по течению (трекинг) ссылка, используемая аргумент без аргументов git-pull (1) и другие команды.

Таким образом, вам не нужно делать какую-либо конфигурацию git.

git push -u origin experimental 
+12

Вы должны использовать опцию '-u' для' push', чтобы ваша локальная ветка отслеживала удаленный, после того как она была общедоступной. Если вы забыли использовать опцию '-u', вы можете просто набрать' git push -u' впоследствии в ветке, тогда 'git pull' будет работать. – Jan

+0

@Jan: хорошая точка. Я включил его в ответ. – VonC

+0

Я отметил, что, когда вы делаете это «git push origin experimental», нет никаких доказательств того, что какие-либо пакеты загружаются. Похоже, что * у пульта уже есть весь материал от вашего более раннего нажатия; он просто должен быть подключен к refs *. – Kaz

0

Вот авторитетная страница github для удаленного управления github http://github.com/guides/push-a-branch-to-github. Это поможет вам ответить на все ваши вопросы.

+0

Не переводит ли он его в главную ветку, или будет неявно создать источник/same_branch_name_as_local? – Coocoo4Cocoa

15

Если имя вашей отрасли является experimental, а имя удаленного является origin, то это

git push origin experimental 
+0

Тот же комментарий, что и выше, но создает ли он экспериментальную ветку неявно на удаленном репо или будет ли он нажимать на мастер удаленных? – Coocoo4Cocoa

+1

он подталкивает экспериментальную ветку и не прикасается к мастеру либо на локальной стороне, либо удаленно. –

1

git push -u <remote-name> <branch-name> не работает, если вновь созданный филиал не породил из того же репо, то есть, если вы не создали новую ветку с помощью git checkout -b new_branch, то это не будет работать.

Например, я клонировал два разных репозитория локально, и мне пришлось копировать repo2/branch1 в repo1 /, а затем нажимать его тоже.

This ссылка помогла мне подтолкнуть мою местную ветвь (клонированный из другого репо) на мой удаленный репозиторий: