Как создать удаленную ветку Git?

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

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

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

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

5.10.2009 09:21:04
кто-нибудь когда-нибудь отвечал тебе на второй вопрос? >> И как бы я сказал своим коллегам вытащить его из верхнего хранилища?
milkplus 27.10.2010 22:14:42
user456814 5.05.2014 04:19:27
@milkplus get fetch --allизвлекает новые ветви на удаленной стороне (но только get fetch --pruneлокально удаляет ссылки на удаленные удаленные ветви). Я думаю, либо они должны быть настроены автоматически, либо вы должны говорить с ними устно.
peterh - Reinstate Monica 29.03.2017 12:15:38
20 ОТВЕТОВ

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

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) без аргументов и другими командами.

3708
13.08.2017 12:55:06
Обратите внимание, что поведение git по умолчанию заключается в отправке соответствующих ссылок, поэтому git push <remote>не будет выдвигать ветвь, если она отсутствует <remote>.
Jakub Narębski 5.10.2009 21:55:02
Возможно, вы захотите использовать git push -u <remote-name> <branch-name>вместо этого, чтобы последующий git pullзнал, что делать.
Bart Schuller 6.04.2011 15:03:41
Вместо того, чтобы явно указывать имя сервера, вы можете просто использовать origin, что означает «сервер, с которого я получил остаток этого репо»: таким образом git push origin <branch-name>.
lambshaanxy 16.05.2011 06:31:26
Если вы забыли использовать эту -uопцию, вы можете просто напечатать git push -uпотом в ветке, тогда git pullбудет работать.
Jan 28.07.2011 13:07:29
Собрать все вместе, git push -u origin <local-branch-name>вот что сработало для меня.
Samo 15.06.2012 19:14:47

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

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
877
26.07.2011 01:09:09
Есть ли способ создать удаленную ветку без создания локальной ветки с тем же именем?
Ariel Gabizon 1.05.2020 18:35:39

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

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

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

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

git remote update

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

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>
83
27.12.2011 16:18:54
Мне нравится это, потому что это позволяет удаленному имени отличаться от локального
Ariel Gabizon 1.05.2020 18:42:30

Вот как вы делаете это в затмении через Egit.

1) Перейдите в представление «Git Repository Exploring» и разверните проект git, для которого вы хотите создать ветку. В разделе Brances -> Local .. выберите ветку, для которой вы хотите создать ветку (в моем случае я выбрал master .. вы можете выбрать другую ветку, если хотите) .. затем щелкните правой кнопкой мыши и выберите опцию Create Branch. и выберите оформить заказ этот вариант проекта, а затем нажмите кнопку Готово.

2) Теперь из проводника проекта выберите проект .. щелкните правой кнопкой мыши, затем Team -> Push Branch.

Будет создана новая удаленная ветка. Вы можете дать название филиала своим коллегам, чтобы они могли его использовать.

3
31.01.2014 23:46:50
Тангенциальное предупреждение об Egit и всех клиентах на основе JGit, AFAIK: они не поддерживают .gitattributes! Это означает, что если ваша команда использует сочетание Windows (CRLF) и Linux / OSX (LF), вы должны зависеть от того, чтобы каждый клиент всегда имел правильные настройки. Естественно, лучше управлять окончаниями строк централизованно на уровне репо или проекта, и .gitattributes является поддерживаемым способом сделать это. Так что, если вам не обязательно использовать Egit ... не надо! :)
cweekly 19.05.2014 21:46:00

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

git checkout -b newbranch

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

git push -u origin HEAD

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

65
24.02.2014 14:58:49
Это помогло в моем случае: git push -u origin HEAD. Я думаю, что это самый понятный способ.
Scadge 7.03.2014 12:12:36
Да, вы никогда не помните, что именно вы в последний раз ввели как ветку, так что это путь.
marksyzm 23.02.2016 11:34:55
@marksyzm Если вы не можете вспомнить, в какой ветке вы находитесь или как ее назвали, вам, вероятно, вообще не стоит нажимать! По крайней мере, не без запуска в git statusпервую очередь.
Zenexer 9.03.2016 05:40:08
Да, нужно убедиться, что мир не взорвется от этого толчка; Согласен.
marksyzm 9.03.2016 11:24:57
Это наиболее эффективный способ одновременного создания как отслеживающей ветви, так и удаленной ветви. Я также хотел бы добавить git remote show originв качестве третьего шага только для визуализации новых отношений отслеживания / отслеживания.
hb5fa 12.09.2016 14:39:07

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

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

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

5
24.02.2014 21:38:11

Я знаю, что на этот вопрос получен хороший ответ, но я просто хотел перечислить шаги, которые я предпринимаю, чтобы создать новую ветку «myNewBranch» и перейти к удаленному («origin» в моем случае) и настроить отслеживание. Считайте, что это версия "TL; DR" :)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch
10
23.10.2014 14:09:17

Теперь с помощью git вы можете просто напечатать, когда вы находитесь в правильной ветке

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

и Git создать для вас ветку происхождения.

8
27.10.2014 17:05:42
-u это сокращение от --set-upstream .. поэтому команда может быть git push -u origin <имя-удаленного-филиала>
Uncaught Exception 28.07.2017 10:22:47
Роковое: «origin» не похоже на git-репозиторий
Dmitry Grinko 23.07.2018 21:03:13
может быть, вам нужно установить происхождение вашего git-репозитория
Maurizio Brioschi 24.07.2018 11:44:27
РЕШЕНИЕ

Простое решение 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
329
14.01.2019 09:54:56
Я нашел, git push -u origin HEADкак ответ здесь, немного более многословно (вы пишете, что вы делаете), не слишком много печатать. Кроме того, git push -uбез дополнительных аргументов у меня не получилось, если ветка была создана с-t
Qw3ry 25.09.2017 07:37:29
git config --global push.default upstream && git checkout -b foo && <change a file> && git push -uне работает (по состоянию на git 2.19.1); push требует аргументов remote и branch.
knite 7.11.2018 02:37:13
Не могли бы вы рассказать о том, что вы имеете в виду git co remote_branch_name?
flannelbeard 16.09.2019 20:35:29

Просто хотел добавить, что пока:

git checkout -b {branchName}

Создает новую ветку, она также проверяет эту ветку / делает ее вашей текущей веткой. Если по какой-то причине все, что вы хотите сделать, это отключить ветку, но не сделать ее текущей ветвью, то вы должны использовать следующую команду:

git branch {branchName}

В первой команде «checkout» делает указанную ветку вашей текущей веткой, а «-b» означает: эта ветвь еще не существует, поэтому сделайте ее для меня.

7
30.03.2015 14:02:24

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

git checkout -b your_branch

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

git push --set-upstream origin your_branch

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

$ git --version
git version 2.3.0

Ура!

26
21.04.2015 23:43:46
Это просто текст справки, сгенерированный командой, git pushкогда ваша локальная ветвь не отслеживается пультом.
nurettin 4.01.2018 08:08:01

Как сделать через Source Tree

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)
6
21.07.2015 11:27:20

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

git push origin HEAD:refs/heads/foo

Это подталкивает любую головку к ветке foo, которая не существовала на удаленном компьютере.

46
25.11.2015 15:29:39
Это полностью запутало мою Visual Studio до такой степени, что она не запустилась бы правильно. Team Explorer вообще не будет загружаться, но все остальное тоже помешано на ошибках. Просто к вашему сведению.
Josh 27.06.2016 20:04:04
Похоже, это должно работать, но когда я действительно попробовал это, наш сервер gitlab не распознал результат как ветвь.
JosephH 25.11.2016 18:25:38
Какая ветка foo разветвлена ​​на удаленном? Что если я захочу, чтобы foo разветвлялся от foo2? Это возможно? Спасибо.
user674669 8.09.2017 21:33:42
Он также работает на сервере Gerrit, создавая новую ветку на удаленном сервере, которой не было до этой команды.
MichaelZ 9.08.2019 18:23:20

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

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 

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

git checkout -b bug_fixes происхождение / разработка

Вы можете нажать на ветку для удаленного репо

git push -u origin bug_fixes

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

git pull origin master,

52
13.05.2019 16:27:11

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

$ 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]

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

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

18
27.05.2016 11:39:29

Создание локальной ветки из существующей ветки (может быть master / development / any-other-branch).

git checkout -b имя_ответа

Нажмите это на пульт

git push -u имя_удаления local_branch_name: имя_удаленного_ответа

Вот,

  1. -u: устанавливает восходящую ветку
  2. remote_name: git устанавливает имя по умолчанию как «origin», когда создает репозиторий. Однако это можно изменить на другое произвольное имя.
  3. local_branch_name: это имя локальной ветви, которую нужно отправить.
  4. remote_branch_name: это имя удаленной ветви, которую мы хотим создать на удалённом компьютере.

Если мы удалим локальные и удаленные имена веток, он будет иметь формат

git push -u имя_удаления имя_ответа

Это подтолкнет локальную ветку к удаленной и с тем же именем, что и у локальной ветви имя_в ветви. Местный филиал также будет отслеживать удаленный филиал.

14
15.02.2017 06:57:20

Самое простое решение ... Drumm Roll ... git version 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

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

33
9.11.2018 05:31:36
Спасибо за ваше предложение. Даже если вы называете это простым решением, я все же думаю, что git push -uэто намного проще. Требуется, чтобы у вас была одна глобальная строка конфигурации, см. Stackoverflow.com/a/27185855/109305 . Я использую git push -uпостоянно, это покрывает 99% моих случаев использования при работе.
Jesper Rønn-Jensen 18.03.2017 14:24:08

Я использую это, и это очень удобно:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

Использование: git mkdir NEW_BRANCH

Вам даже не нужен статус мерзавца; возможно, я просто хочу убедиться, что все идет хорошо ...

Вы можете иметь ОБА ЛОКАЛЬНУЮ и УДАЛЕННУЮ ветвь с помощью одной команды.

0
24.07.2019 09:57:17

[Быстрый ответ]

Вы можете сделать это в 2 этапа:

1. Используйте checkoutдля создания локальной ветки:

git checkout -b yourBranchName

2. Используйте pushкоманду для автоматического создания ветки и отправки кода в удаленный репозиторий:

git push -u origin yourBanchName

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

25
4.12.2019 07:15:48
Быстро и точно!
Dev 27.02.2020 20:30:09

Я использовал два способа создать ветку

Если вы используете TortoiseGit, выполните следующие действия: -

1.Создать ветку с помощью TortoiseGit

Щелкните правой кнопкой мыши по своему проекту >>> TortoiseGit >>> Создать ветку >>> введите название ветви и выберите базовую ветку, затем нажмите ОК

2. Нажмите на ветку

Щелкните правой кнопкой мыши на своем проекте >>> TortoiseGit >>> нажмите >>> нажмите ОК

3. Переключиться на новую ветку

Щелкните правой кнопкой мыши на своем проекте >>> TortoiseGit >>> Switch / Checkout >>> выберите вновь созданную ветку и нажмите ОК

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

1.Создать ветку с помощью командной строки

$ git checkout -b new_branch_name

2. Нажмите на ветку

$ git push origin new_branch_name

3. Переключитесь на новую ветку, она уже переключится на new_branch_name, иначе вы можете использовать

$ git checkout new_branch_name

0
7.01.2020 06:01:15