ti-enxame.com

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

Eu quero ser capaz de fazer o seguinte:

  1. Criar uma filial local com base em alguma outra ramificação (remota ou local) (via git branch ou git checkout -b)

  2. Empurre a ramificação local para o repositório remoto (publicar), mas torne-a rastreável para que git pull e git Push funcionem imediatamente.

Como faço isso?

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

3956
Roni Yaniv

No Git 1.7.0 e posterior, você pode fazer o checkout de uma nova ramificação:

git checkout -b <branch>

Edite arquivos, adicione e confirme. Então Pressione com o -u (abreviação de --set-upstream) option:

git Push -u Origin <branch>

O Git irá configurar as informações de rastreamento durante o Push.

6188
Daniel Ruoso

Se você não está compartilhando seu repositório com outras pessoas, isso é útil para enviar todas suas ramificações para o controle remoto e --set-upstream rastrear corretamente para você:

git Push --all -u

(Não é exatamente o que o OP estava pedindo, mas esse one-liner é bem popular)

Se você está compartilhando seu repositório com outras pessoas, isso não é realmente uma boa forma, pois você vai entupir o repositório com todos os seus ramos experimentais desonestos.

470
ErichBSchulz

Antes da introdução de git Push -u, não havia opção git Push para obter o que você deseja. Você teve que adicionar novas instruções de configuração.

Se você criar uma nova ramificação usando:

$ git checkout -b branchB
$ git Push Origin branchB:branchB

Você pode usar o comando git config para evitar a edição diretamente 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 de rastreamento para essa ramificação.

[branch "branchB"]
    remote = Origin
    merge = refs/heads/branchB
140
Lohrun

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

git branch <branch-name>

Para empurrá-lo para o remote repository, faça:

git Push -u Origin <branch-name>
119
piyushmandovra

Uma ligeira variação das soluções já dadas aqui:

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

    git checkout -b branchname
    
  2. Empurre a 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
    

    Usando HEAD é uma "maneira prática de enviar o ramo atual para o mesmo nome no controle remoto". Fonte: https://git-scm.com/docs/git-Push Em termos Git, HEAD (em maiúsculas) é uma referência ao topo da ramificação atual (árvore ).

    A opção -u é apenas a abreviação de --set-setupstream. Isso adicionará uma referência de rastreamento upstream para o ramo atual. você pode verificar isso procurando em seu arquivo .git/config:

     Enter image description here

78
bg17aw

Eu simplesmente faço

git Push -u Origin localBranch:remoteBranchToBeCreated

sobre um projeto já clonado.

O Git cria uma nova ramificação chamada remoteBranchToBeCreated sob meus commits que fiz em localBranch.

32
Arda

Eu suponho que você já tenha clonado um projeto como:

git clone http://github.com/myproject.git
  1. Em seguida, na sua cópia local, crie um novo branch e confira:

    git checkout -b <newbranch>
    
  2. Supondo que você fez um "git bare --init" no seu servidor e criou o myapp.git, você deve:

    git remote add Origin ssh://example.com/var/git/myapp.git
    git Push Origin master
    
  3. Depois disso, os usuários devem poder

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

NOTA: Eu estou supondo que você tenha seu servidor instalado e funcionando. Se não for, não vai funcionar. Um bom como fazer é aqui .

ADICIONADO

Adicione um ramo remoto:

git Push Origin master:new_feature_name

Verifique se tudo está bem (busque a origem e aliste as 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

Atualize tudo:

git pull
29
VP.

edit desatualizado, use git Push -u Origin $BRANCHNAME


Use git publish-branch de diversas ferramentas Git de William ( repo antigo e clone ).

OK, não 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}

Em seguida, execute git-publish-branch REMOTENAME BRANCHNAME, onde REMOTENAME é geralmente Origin (você pode modificar o script para usar Origin como padrão, etc ...)

22
Tobias Kienzler

Para criar uma nova ramificação ramificando a partir de uma ramificação existente

git checkout -b <new_branch>

e, em seguida, empurre essa nova ramificação para o repositório usando

git Push -u Origin <new_branch>

Isso cria e envia todas as confirmações locais para uma ramificação remota recém-criada Origin/<new_branch>

19
cptjack

Para a versão do GitLab anterior a 1.7, use:

git checkout -b name_branch

(name_branch, ex: master)

Para empurrá-lo para o repositório remoto, faça:

git Push -u Origin name_new_branch

(name_new_branch, exemplo: feature)

10
Fadid

Eu criei um alias para que, sempre que eu criasse uma nova ramificação, ela ativasse e rastreasse a ramificação remota de acordo. Eu coloquei o seguinte pedaço 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 é o novo nome da minha filial.

8
Thuy Trinh

Construindo um pouco sobre as respostas aqui, eu envolvi este processo como um simples script Bash, que poderia ser usado como um alias do Git também.

A adição importante para mim é que isso me pede para executar testes de unidade antes de confirmar e passar o nome atual da ramificação 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
2
Brad Parks