Como mover uma nova ramificação local para um repositório Git remoto e rastreá-la?

Eu quero ser capaz de fazer o seguinte:

  • Crie um branch local baseado em algum outro branch (remoto ou local) (via git branch ou git checkout -b )

  • Clique na ramificação local para o repositório remoto (publicar), mas faça isso para que git pull e git push funcionem imediatamente.

Como fazer isso?

Eu sei sobre --set-upstream no Git 1.7, mas isso é ação após a criação. Eu quero encontrar uma maneira de fazer alterações semelhantes quando clico em uma ramificação em um repositório remoto.

3689
04 мая '10 в 15:58 2010-05-04 15:58 Roni Yaniv perguntou em 04 de maio de 2010 às 15:58 2010-05-04 15:58
@ 13 respostas

No Git 1.7.0 e posterior, você pode conferir a nova ramificação:

 git checkout -b <branch> 

Editando arquivos, adicionando e corrigindo. Em seguida, clique com a opção -u (abreviação de --set-upstream ) :

 git push -u origin <branch> 

O Git irá configurar as informações de rastreamento enquanto você clica.

5823
03 июня '11 в 23:50 2011-06-03 23:50 a resposta é dada Daniel Ruoso Junho 03 '11 em 23:50 2011-06-03 23:50

Se você não compartilha seu repo com outros usuários, isso é útil para empurrar todos os seus branches para um remoto, e --set-upstream ideal para você:

 git push --all -u 
border=0

(Não é exatamente o que o OP solicitou, mas essa interface de uma linha é bastante popular)

Se você compartilha seu repositório com outras pessoas, essa não é uma forma muito boa, pois você estará preenchendo o repositório com todos os seus ramos experimentais peculiares.

449
20 янв. A resposta é dada por ErichBSchulz 20 de janeiro 2014-01-20 14:36 '14 às 14:36 2014-01-20 14:36

Antes da introdução do git push -u não havia opção de git push para conseguir o que você quer. Você deve ter adicionado novas instruções de configuração.

Se você estiver criando uma nova ramificação, use:

 $ git checkout -b branchB $ git push origin branchB:branchB 

Você pode usar o comando git config para evitar a edição direta do arquivo .git/config .

 $ git config branch.branchB.remote origin $ git config branch.branchB.merge refs/heads/branchB 

Ou você pode editar manualmente o arquivo .git/config para obter informações sobre o rastreamento desse segmento.

 [branch "branchB"] remote = origin merge = refs/heads/branchB 
133
04 мая '10 в 16:03 2010-05-04 16:03 A resposta é dada por Lohrun em 04 May '10 at 16:03 2010-05-04 16:03

Simplificando, para criar um novo ramo local , faça:

 git branch <branch-name> 

Para movê-lo para o repositório remoto , siga estas etapas:

 git push -u origin <branch-name> 
111
24 апр. Resposta dada por piyushmandovra em 24 de abr 2015-04-24 15:09 '15 às 15:09 2015-04-24 15:09

Uma pequena variação das soluções já propostas:

  1. Crie uma ramificação local com base em alguma outra ramificação (remota ou local):

     git checkout -b branchname 
  2. Clique na ramificação local para o repositório remoto (publicar), mas torne-a rastreável, para que git pull e git push funcionem imediatamente

     git push -u origin HEAD 

    Usar o HEAD é "uma maneira conveniente de traduzir o ramo atual para o mesmo nome no controle remoto". Fonte: https://git-scm.com/docs/git-push Em termos de Git HEAD (maiúscula) é um link para o topo da ramificação atual (árvore).

    A opção -u é apenas a abreviação de --set-setupstream . Isso adicionará um link de rastreamento upstream para o branch atual. Você pode verificar isso procurando no arquivo .git / config:

    2019

Eu suponho que você já tenha clonado o projeto, por exemplo:

 git clone http://github.com/myproject.git 
  • Em seguida, crie uma nova ramificação em sua cópia local e verifique:

     git checkout -b <newbranch> 
  • Suponha que você criou "git bare -init" no seu servidor e criou myapp.git, você deve:

     git remote add origin ssh://example.com/var/git/myapp.git git push origin master 
  • Depois disso, os usuários devem poder

     git clone http://example.com/var/git/myapp.git 

NOTA . Eu suponho que seu servidor está funcionando. Se não for, não funcionará. Um bom guia prático está aqui .

ADICIONADO

Adicione um ramo remoto:

 git push origin master:new_feature_name 

Verifique se está tudo bem (selecione o início e a lista de filiais remotas):

 git fetch origin git branch -r 

Crie uma ramificação local e rastreie a ramificação remota:

 git checkout -tb new_feature_name origin/new_feature_name 

Atualizar tudo:

 git pull 
27
A resposta é dada pelo VP. 2010-05-04 16:04 04 de maio de 2010 às 16:04 2010-05-04 16:04

Eu apenas faço

 git push -u origin localBranch:remoteBranchToBeCreated 

sobre um projeto já clonado.

O Git cria um novo branch chamado remoteBranchToBeCreated sob o meu remoteBranchToBeCreated eu fiz no localBranch .

24
20 марта '17 в 14:13 2017-03-20 14:13 a resposta foi dada por Arda 20 de março de '17 às 14:13 2017-03-20 14:13

editar obsoleto, basta usar o git push -u origin $BRANCHNAME


Use git publish-branch de várias ferramentas do Git de William ( repositório e clone gitorious ).

Bem, não Ruby, ignorando as precauções! - pegue as últimas três linhas do script e crie um script bash, git-publish-branch :

19
04 мая '10 в 16:03 2010-05-04 16:03 respondeu a Tobias Kienzler em 04 mai '10 at 16:03 2010-05-04 16:03

Para criar um novo ramo, separando-o do ramo existente

git checkout -b <new_branch>

e, em seguida, clique neste novo segmento no repositório usando

git push -u origin <new_branch>

Isso cria e envia todas as confirmações locais para a origin/<new_branch> remota recém-criada origin/<new_branch>

16
03 июня '15 в 23:36 2015-06-03 23:36 a resposta é dada por cptjack Junho 03 '15 em 23:36 2015-06-03 23:36

Eu criei um alias, portanto, sempre que eu criar uma nova ramificação, ela excluirá e rastreará a ramificação remota. Eu coloquei o seguinte trecho no arquivo .bash_profile :

 # Create a new branch, push to origin and track that remote branch publishBranch() { git checkout -b $1 git push -u origin $1 } alias gcb=publishBranch 

Uso : apenas digite gcb thuy/do-sth-kool com thuy/do-sth-kool - este é o novo nome da minha filial.

7
05 янв. a resposta é dada por Thuy Trinh 05 Jan 2016-01-05 13:11 '16 às 13:11 2016-01-05 13:11

Para o GitLab versão 1.7, use:

git checkout -b name_branch

(name_branch, ex: master)

Para enviá-lo para um repositório remoto, siga estas etapas:

git push -u origin name_new_branch

(name_new_branch, exemplo: function)

6
06 дек. A resposta é dada Fadid 06 dez. 2016-12-06 21:42 '16 às 21:42 2016-12-06 21:42

Confiando um pouco nas respostas aqui, eu envolvi esse processo como um simples script bash, que, é claro, poderia ser usado como um alias do Git.

Uma adição importante para mim é que ela me encoraja a executar testes de unidade antes de confirmar e transmitir o nome atual da ramificação padrão.

 $ git_push_new_branch.sh Have you run your unit tests yet? If so, pass OK or a branch name, and try again usage: git_push_new_branch {OK|BRANCH_NAME} eg git_push_new_branch -> Displays prompt reminding you to run unit tests git_push_new_branch OK -> Pushes the current branch as a new branch to the origin git_push_new_branch MYBRANCH -> Pushes branch MYBRANCH as a new branch to the origin 

git_push_new_branch.sh

 function show_help() { IT=$(CAT <<EOF Have you run your unit tests yet? If so, pass OK or a branch name, and try again usage: git_push_new_branch {OK|BRANCH_NAME} eg git_push_new_branch.sh -> Displays prompt reminding you to run unit tests git_push_new_branch.sh OK -> Pushes the current branch as a new branch to the origin git_push_new_branch.sh MYBRANCH -> Pushes branch MYBRANCH as a new branch to the origin ) echo "$IT" exit } if [ -z "$1" ] then show_help fi CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD) if [ "$1" == "OK" ] then BRANCH=$CURR_BRANCH else BRANCH=${1:-$CURR_BRANCH} fi git push -u origin $BRANCH 
1
21 апр. A resposta é dada Brad Parks 21 abr. 2017-04-21 16:30 '17 às 16:30 de 2017-04-21 16:30

Para carregar a ramificação local do repositório público, você precisa de cd para abrir o repositório compartilhado e, em seguida, usar o seguinte código:

 git push -u origin branchname 
-8
26 июня '15 в 12:37 2015-06-26 12:37 a resposta é dada por shankar kumar Junho 26 '15 em 12:37 2015-06-26 12:37

Outras questões sobre tags ou Ask a Question