Como faço para enviar um novo ramo local para um repositório Git remoto e rastreá-lo também?

quero ser capaz de fazer o seguinte:

  1. criar um ramo local baseado em algum outro ramo (remoto ou local) (via git branch ou git checkout -b)

  2. empurrar a ramificação local para o repositório remoto (publicar), mas torná-lo trackable so git pull and git push will work immediately.

Como faço isso?

Eu sei sobre --set-upstream no Git 1.7, mas isso é uma acção pós-criação. Eu quero encontrar uma maneira de fazer uma mudança semelhante ao empurrar o ramo para o repositório remoto.

Author: Peter Mortensen, 2010-05-04

13 answers

No Git 1.7.0 e mais tarde, poderá obter um novo ramo:

git checkout -b <branch>

Editar ficheiros, adicionar e enviar. Em seguida empurre com o -u (abreviatura de --set-upstream) opção:

git push -u origin <branch>

O Git irá configurar as informações de localização durante o empurrão.

 5872
Author: Daniel Ruoso, 2017-09-23 20:27:17

Se não está a partilhar o seu acordo com outros, isto é útil para empurrar todos os seus ramos para o remoto, e --set-upstream rastrear correctamente para si:

git push --all -u

(não é exactamente o que a OP estava a pedir, mas este transatlântico é muito popular)

Se você está compartilhando seu repo com outros esta não é realmente boa forma como você vai entupir o repo com todos os seus ramos experimentais duvidosos.

 455
Author: ErichBSchulz, 2018-03-19 01:53:50

Antes da introdução de git push -u, não havia opção git push para obter o que deseja. Teve de adicionar novas instruções de configuração.

Se criar um novo ramo usando:

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

Pode usar o comando git config para evitar editar directamente o ficheiro .git/config.

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

Ou pode editar manualmente o ficheiro .git/config para ter informação de seguimento neste ramo.

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB
 135
Author: Lohrun, 2016-02-01 19:54:34

Simplificando, para criar um novoLocal , Faça:

git branch <branch-name>

Para o empurrar para o repositório remoto, Faça:

git push -u origin <branch-name>
 112
Author: piyushmandovra, 2016-02-10 19:30:42

UMA ligeira variação das soluções já apresentadas:

  1. Criar um ramo local baseado noutro ramo (remoto ou local):

    git checkout -b branchname
    
  2. Empurre o ramo local para o repositório remoto (publique), mas torne-o localizável para que git pull e git push funcionem imediatamente

    git push -u origin HEAD
    

    Usar HEAD é uma "forma útil de empurrar o ramo actual para o mesmo nome no remoto". Fonte: https://git-scm.com/docs/git-push Em termos gerais, maiúsculas) é uma referência ao topo do ramo atual (árvore).

    A opção -u é muito curta para --set-setupstream. Isto irá adicionar uma referência de rastreamento upstream para o ramo atual. você pode verificar isso olhando no seu .ficheiro git/config:

    Enter image description here

 63
Author: bg17aw, 2018-05-21 20:15:41
Acho que já clonaste um projecto como:
git clone http://github.com/myproject.git
  1. Depois, na sua cópia local, crie um novo ramo e confira:

    git checkout -b <newbranch>
    
  2. Supondo que fez um "GIT bare --init" no seu servidor e criou o myapp.git, devias:
    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. Depois disso, os utilizadores devem ser capazes de

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

Nota: presumo que tenha o seu servidor a funcionar. Se não for, não vai funcionar. A bom how-to is here .

Adicionado

Adicionar um ramo remoto:

git push origin master:new_feature_name

Verifique se está tudo bem (obter a origem e listar os ramos remotos):

git fetch origin
git branch -r

Criar um ramo local e seguir o ramo remoto:

git checkout -tb new_feature_name origin/new_feature_name

Actualiza tudo:

git pull
 27
Author: VP., 2016-02-10 19:26:59

Eu simplesmente faço

git push -u origin localBranch:remoteBranchToBeCreated
Sobre um projecto já clonado.

O Git cria um novo ramo chamado remoteBranchToBeCreated sob os meus commits que fiz em localBranch.

 24
Author: Arda, 2018-05-21 20:14:25

Editar desactualizado, basta usar git push -u origin $BRANCHNAME


Utilizar git publish-branch das ferramentas Git diversas do William (Gitorious repo e clone ).

Ok, sem Ruby, então ... ignorando as salvaguardas! - pegue as últimas três linhas do script e crie um script bash, git-publish-branch:
#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}

Depois executar git-publish-branch REMOTENAME BRANCHNAME, onde o REMOTENAME é normalmente de origem (poderá modificar o programa para tomar a origem por omissão, etc...)

 20
Author: Tobias Kienzler, 2017-02-22 07:21:59

Para criar um novo ramo, ramificando - se do ramo existente

git checkout -b <new_branch>

E depois empurrar esta nova ramificação para o repositório usando

git push -u origin <new_branch>

Isto cria e empurra todos os commits locais para um ramo remoto recentemente criado origin/<new_branch>

 16
Author: cptjack, 2015-06-03 20:36:39
Fiz um nome falso para que, sempre que criar um novo ramo, ele Pressione e siga o ramo remoto em conformidade. Coloquei o seguinte bloco no ficheiro .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 : basta escrever gcb thuy/do-sth-kool com thuy/do-sth-kool é o meu novo nome do ramo.

 7
Author: Thuy Trinh, 2016-01-05 10:11:01

Para a versão do GitLab antes de 1, 7, utilizar:

git checkout -b name_branch

(name_branch, ex :master)

Para o enviar para o repositório remoto, faça:

git push -u origin name_new_branch

(name_new_branch, exemplo: funcionalidade)

 6
Author: Fadid, 2017-03-15 16:54:01

Baseando-me ligeiramente nas respostas aqui, concluí este processo como um simples script Bash, que pode, naturalmente, ser usado como um nome falso Git também.

A adição importante para mim é que isso me leva a executar testes de unidade antes de cometer e passar no nome do ramo atual por 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}

  e.g.

  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}

  e.g.

  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
Author: Brad Parks, 2018-06-08 18:39:08

Para enviar a sua sucursal local de um repositório público, você precisa cd para o repositório público e, em seguida, usar o seguinte código:

git push -u origin branchname
 -8
Author: shankar kumar, 2016-02-10 19:31:15