Как создать удаленную ветку Git? - PullRequest
2923 голосов
/ 05 октября 2009

Я создал локальную ветвь, которую я хочу «протолкнуть» вверх по течению. Здесь, на Stack Overflow, есть похожий вопрос о том, как отслеживать недавно созданную удаленную ветку.

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

  • Как бы я это сделал? (мои поиски в Google, похоже, ничего не нашли).
  • Как бы я сказал своим коллегам вытащить его из верхнего хранилища?

ОБНОВЛЕНИЕ С Git 2.0 есть более простой ответ Я написал ниже: https://stackoverflow.com/a/27185855/109305

Ответы [ 17 ]

3541 голосов
/ 05 октября 2009

Сначала вы создаете свою ветку локально:

git checkout -b <branch-name> # Create a new branch and check it out

Удаленная ветвь создается автоматически, когда вы отправляете ее на удаленный сервер. Поэтому, когда вы почувствуете, что готовы к этому, вы можете просто сделать:

git push <remote-name> <branch-name> 

Где <remote-name> обычно origin, имя, которое git дает удаленному, с которого вы клонировали. Ваши коллеги просто потянут эту ветку, и она автоматически будет создана локально.

Обратите внимание, что формально этот формат:

git push <remote-name> <local-branch-name>:<remote-branch-name>

Но когда вы опускаете одно, подразумевается, что оба имени ветвей одинаковы. Сказав это, как слово предостережение , не делайте критическую ошибку, указав только :<remote-branch-name> (с двоеточием), иначе удаленная ветвь будет удалена!

Чтобы последующий git pull знал, что делать, вместо этого вы можете использовать:

git push --set-upstream <remote-name> <local-branch-name> 

Как описано ниже, опция --set-upstream устанавливает восходящую ветвь:

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

838 голосов
/ 26 июля 2011

Во-первых, вы должны создать свою ветку локально

git checkout -b your_branch

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

git push -u origin your_branch

Товарищи по команде могут связаться с вашей веткой, выполнив:

git fetch
git checkout origin/your_branch

Вы можете продолжить работу в ветке и push в любое время, не передавая аргументы git push (git push без аргументов будет переводить мастер на удаленный мастер, your_branch локальный на удаленный your_branch и т. Д.

git push

Товарищи по команде могут перейти в вашу ветку, выполнив коммиты, а затем явно нажав

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

Или отслеживание ветви, чтобы избежать аргументов для git push

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push
294 голосов
/ 28 ноября 2014

Решение Simple Git 2.0+:

Начиная с Git 2.0, поведение стало проще :

Вы можете настроить git с помощью push.default = current, чтобы упростить жизнь:

Я добавил это, так что теперь я могу просто открыть новую ветку с

$ git push -u

-u будет отслеживать удаленную ветвь с тем же именем. Теперь с этой конфигурацией вы будете автоматически угадывать удаленную ссылку на git push. Из документации git.config :

push.default

Определяет действие, которое должен выполнить git push, если явно не указан refspec.

push.default = current - нажмите текущую ветку, чтобы обновить ветку с то же имя на принимающей стороне. Работает как в центральном, так и в нецентральном рабочих процессах.

Для меня это хорошее упрощение моего повседневного рабочего процесса в Git. Параметр конфигурации учитывает «обычный» вариант использования, когда вы добавляете ветку локально и хотите создать ее удаленно. Кроме того, я так же легко могу создавать локальные ветви с удаленных компьютеров, просто набрав git co remote_branch_name (в отличие от использования флага --set-upstream-to).

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

Чтобы добавить к вашей глобальной конфигурации Git, запустите это в командной строке:

$ git config --global push.default current
72 голосов
/ 27 декабря 2011

Как указано в предыдущих ответах,

git push <remote-name> <local-branch-name>:<remote-branch-name>

достаточно для проталкивания локальной ветки.

Ваши коллеги могут вытянуть все удаленные ветви (включая новые) с помощью этой команды:

git remote update

Затем, чтобы внести изменения в ветку, обычный поток:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>
58 голосов
/ 24 февраля 2014

Создать новую ветку локально на основе текущей ветки:

git checkout -b newbranch

Примите любые изменения, как обычно. Затем нажмите вверх по течению:

git push -u origin HEAD

Это ярлык, чтобы переместить текущую ветку в ветку с тем же именем на origin и отследить ее, чтобы вам не нужно было указывать origin HEAD в будущем.

37 голосов
/ 25 ноября 2015

Если вы хотите просто создать удаленную ветку без локальной, вы можете сделать это следующим образом:

git push origin HEAD:refs/heads/foo

Он выталкивает любую головку на ветку foo , которой не было на пульте.

31 голосов
/ 01 мая 2016

Если вы хотите создать ветку из текущей ветки

git checkout -b {your_local_branch_name} 

вы хотите ветку из удаленной ветки, вы можете попробовать

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

Если вы сделали изменения, вы можете добавить файл.

git add -A or git add <each_file_names>

Затем выполните коммит локально

git commit -m 'your commit message'

Когда вы хотите перейти к удаленному репо

git push -u origin <your_local_branch_name>

Все вместе будет

git checkout -b bug_fixes 

или Если вы хотите создать ветку из удаленной ветки, скажите development

git checkout -b bug_fixes origin / development

Вы можете перейти в филиал к удаленному репо по

git push -u origin bug_fixes

В любое время, когда вы хотите обновить свою ветку из любой другой ветки, скажите master .

git pull origin master.

30 голосов
/ 18 марта 2017

Самое простое решение ... Drumm Roll ... git версия 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

N.B. - Ветвь, которую вы только что создали в своей локальной среде, и удаленная несуществующая ветвь, в которую вы пытаетесь протолкнуть, должно иметь то же имя .

23 голосов
/ 22 апреля 2015

Сначала вы создаете ветку локально:

git checkout -b your_branch

А затем создать ветку удаленно:

git push --set-upstream origin your_branch

Примечание: это работает на последних версиях git:

$ git --version
git version 2.3.0

Ура!

16 голосов
/ 27 мая 2016

Создайте ветку на вашем локальном компьютере и переключитесь в эту ветку:

$ git checkout -b [name_of_your_new_branch]

Нажмите на ветку на github:

$ git push origin [name_of_your_new_branch]

Если вы хотите что-то зафиксировать в своей ветке, обязательно будьте в своей ветке.

Вы можете просмотреть все ветви, созданные с помощью:

$ git branch

Который покажет:

* approval_messages
  master
  master_clean

Добавить новый пульт для вашей ветки:

$ git remote add [name_of_your_remote] 

Внесите изменения из вашего коммита в вашу ветку:

$ git push origin [name_of_your_remote]

Обновите вашу ветку, когда оригинальная ветка из официального репозитория была обновлена:

$ git fetch [name_of_your_remote]

Затем вам нужно подать заявку на слияние изменений, если ваша ветка является производной от разработки, вам нужно сделать:

$ git merge [name_of_your_remote]/develop

Удалить ветку в локальной файловой системе:

$ git branch -d [name_of_your_new_branch]

Чтобы принудительно удалить локальную ветку в вашей файловой системе:

$ git branch -D [name_of_your_new_branch]

Удалить ветку на github:

$ git push origin :[name_of_your_new_branch]

Здесь вся информация

Другой Существующий проект

...