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

2467

Я создал локальную ветвь, которую я хочу "нажать" вверх по течению. В Qaru есть аналогичный вопрос о том, как отслеживать только что созданную удаленную ветвь.

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

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

ОБНОВЛЕНИЕ С Git 2.0 есть более простой ответ, который я написал ниже: https://stackoverflow.com/questions/1519006/how-do-you-create-a-remote-git-branch

  • 9
    кто-нибудь когда-нибудь отвечал тебе на второй вопрос? >> А как бы я сказал своим коллегам вытащить его из верхнего хранилища?
  • 0
    Возможно связано: Pro Git: 3.5 Git Branching - Удаленные ветки .
Показать ещё 2 комментария
Теги:
git-branch
branch

17 ответов

183
Лучший ответ

Простое решение Git 2.0+:

По состоянию Git 2.0 поведение упростилось:

Вы можете настроить Git на push.default = current, чтобы облегчить жизнь:

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

$ git push -u

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

push.default

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

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

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

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

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

$ git config --global push.default current
  • 3
    Я считаю , git push -u origin HEAD , как ответил здесь немного более многословным (вы пишете , что вы делаете) , не слишком много , чтобы напечатать. Более того, git push -u без дополнительных аргументов не работала, если ветвь создавалась с помощью -t
  • 0
    git config --global push.default upstream && git checkout -b foo && <change a file> && git push -u не работает (по состоянию на git 2.19.1); push требует аргументов remote и branch.
2869

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

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

  • 81
    Обратите внимание, что поведение git по умолчанию заключается в отправке соответствующих ссылок, поэтому git push <remote> не будет выдвигать ветку, если она не присутствует в <remote> .
  • 210
    Возможно, вы захотите использовать вместо этого git push -u <remote-name> <branch-name> , чтобы последующий git pull знал, что делать.
Показать ещё 27 комментариев
742

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

git checkout -b your_branch

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

git push -u origin your_branch

Друзья могут достигать вашей ветки, делая:

git fetch
git checkout origin/your_branch

Вы можете продолжить работу в ветке и нажимать, когда захотите, без передачи аргументов на git push (без аргументов git push нажимает мастер на удаленный мастер, your_branch local на remote 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
62

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

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

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

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

git remote update

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

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>
39

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

git checkout -b newbranch

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

git push -u origin HEAD

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

  • 4
    Это помогло в моем случае: git push -u origin HEAD . Я думаю, что это самый понятный способ.
  • 2
    Да, вы никогда не помните, что именно вы в последний раз ввели как ветку, так что это путь.
Показать ещё 3 комментария
26

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

git push origin HEAD:refs/heads/foo

Он толкает все, что есть у вашего HEAD, чтобы отключить foo, которого не было на пульте дистанционного управления.

  • 0
    Это полностью смутило мою Visual Studio до такой степени, что она не запустилась бы правильно. Team Explorer вообще не будет загружаться, но все остальное тоже помешано на ошибках. Просто к вашему сведению.
  • 0
    Похоже, это должно работать, но когда я действительно попробовал это, наш сервер gitlab не распознал результат как ветвь.
Показать ещё 1 комментарий
20

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

git checkout -b your_branch

И затем, чтобы создать ветвь удаленно:

git push --set-upstream origin your_branch

Примечание. Это работает с версиями git:

$ git --version
git version 2.3.0

Ура!

  • 0
    Это просто текст справки, сгенерированный командой git push когда ваша локальная ветвь не отслеживается пультом.
17

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

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**

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

git pull origin master.

15

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

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

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

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

10

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

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes , and go a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

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

  • 3
    Спасибо за ваше предложение. Даже если вы называете это простым решением, я все же думаю, что git push -u намного проще. Требуется, чтобы у вас была одна глобальная строка конфигурации, см. Stackoverflow.com/a/27185855/109305 . Я использую git push -u постоянно, он покрывает 99% случаев использования при работе.
8

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

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

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

  • 1
    -u это сокращение от --set-upstream .. поэтому команда может быть git push -u origin <имя-удаленного филиала>
  • 0
    роковое: «origin» не похоже на git-репозиторий
Показать ещё 1 комментарий
7

Я знаю, что этот вопрос хорошо ответил, но просто хотел перечислить шаги, которые я предпринимаю, чтобы создать новую ветку "myNewBranch" и нажать на удаленный ( "происхождение" в моем случае) и настроить отслеживание. Рассмотрим эту версию "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
6

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

git checkout -b {branchName}

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

git branch {branchName}

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

5

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

git checkout -b имя_каталога

Нажмите эту кнопку на пульте дистанционного управления

git push -u имя_данных local_branch_name: remote_branch_name

Здесь

  • -u: устанавливает ветвь восходящего потока
  • имя_даля: git устанавливает имя по умолчанию как "источник" при создании репозитория. Однако это может быть изменено на другое произвольное имя.
  • local_branch_name: имя локальной ветки, которая будет нажата.
  • remote_branch_name: имя удаленной ветки, которую мы хотим создать на удаленном компьютере.

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

git push -u имя_данных имя_памяти

Это приведет к удалению локальной ветки и с тем же именем, что и имя ветки branch. Локальная ветка также будет отслеживать удалённую ветку.

4

Как сделать через Дерево источников

 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)
3

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

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

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

3

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

1) Перейдите в представление "Git Repository Exploring" и объясните проект git, в который вы хотите создать ветвь. В разделе Brances → Local.. выберите ветку, для которой вы хотите создать ветку (в моем случае я выбрал master.. вы можете выбрать другую другую ветку, если хотите).. затем щелкните правой кнопкой мыши и выберите опцию Create Branch. и выберите опцию checkout this project, а затем нажмите кнопку завершения.

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню