Como copiar uma ramificação local do Git para um repositório remoto

127

Tomei as seguintes etapas até agora:

  1. Clonou um repositório Git remoto
  2. Ramificou o ramo mestre para um teste experimental
  3. código editado / testado / confirmado no ramo experimental

Agora, não estou pronto para mesclar experimental em master. No entanto, quero enviá-lo de volta ao repositório remoto, pois esse é o repositório que compartilho com alguns colegas. Gostaria que eles vissem o que fiz no ramo experimental. Normalmente, apenas acesso o repositório remoto via SSH.

Como compartilhar minha filial local no repositório remoto, sem afetar a filial principal do repositório remoto?

Coocoo4Cocoa
fonte
Este link também é muito útil nesse aspecto. Partilha git branches
Vishnu Kumar

Respostas:

157

De acordo com a página de manual do git push :

 git push origin experimental

Encontre uma referência que corresponda experimentalao repositório de origem (provavelmente, ela encontraria refs/heads/experimental) e atualize a mesma referência (por exemplo refs/heads/experimental) no repositório de origem.
Se experimentalnão existisse remotamente, seria criado .

É o mesmo que:

git push origin experimental:refs/heads/experimental

Crie a ramificação experimentalno repositório de origem, copiando a experimentalramificação atual .
Este formulário é necessário apenas para criar uma nova ramificação ou marca no repositório remoto quando o nome local e o nome remoto forem diferentes ; caso contrário, o nome ref por si só funcionará.

Ou, como mencionado na dica do git , você pode configurar um "Controle Remoto Padrão da Filial":

Você pode usar o git config para atribuir um controle remoto padrão a um determinado ramo. Este controle remoto padrão será usado para enviar por push a ramificação, a menos que especificado de outra forma.

Isso já foi feito quando você usa o git clone, permitindo que você use o git push sem nenhum argumento para enviar o branch master local para atualizar o branch master do repositório de origem.

git config branch.<name>.remote <remote> 

pode ser usado para especificar isso manualmente.


Jan sugere (para git> = 1.7.0 ) a opção push -u(ou push --set-upstream):

Para cada ramificação atualizada ou enviada com êxito, adicione uma referência upstream (rastreamento), usada pelo git-pull (1) sem argumentos e outros comandos.

Dessa forma, você não precisa fazer nenhuma configuração do git.

git push -u origin experimental
VonC
fonte
12
Você deve usar a -uopção para pushgarantir que sua filial local rastreie a remota depois de torná-la pública. Se você esquecer de usar a -uopção, basta digitar git push -uposteriormente no ramo e, em seguida git pull, funcionará.
Janeiro
Eu notei que, quando você faz isso git push origin experimental, não há evidências de upload de pacotes. Parece que o controle remoto já possui todo o material do seu envio anterior; só tem que ser ligado aos árbitros .
Kaz
@ Kaz: teria todo o material se essas novas confirmações já fossem enviadas para outro ramo no controle remoto. Nesse caso, git push origin experimentalapenas criaria a filial experimentalno controle remoto.
VonC 23/03/12
Obrigado! Sua resposta foi muito útil.
hakre
15

Se o nome da sua ramificação é experimentale o nome do controle remoto é origin, então é

git push origin experimental
John Douthat
fonte
O mesmo comentário acima, mas isso cria o ramo experimental implicitamente no repositório remoto, ou será enviado para o mestre do controle remoto?
Coocoo4Cocoa
1
ele empurra o ramo experimental e não toca mestre em cada lado do local ou remotamente
John Douthat
1

git push -u <remote-name> <branch-name>não funcionará se o ramo recém-criado não for gerado no mesmo repositório, ou seja, se você não tiver criado o novo ramo usando git checkout -b new_branch, isso não funcionará.

Por exemplo, eu clonei dois repositórios diferentes localmente e tive que copiar o repo2 / branch1 para o repo1 / e depois enviá-lo também.

Esse link me ajudou a enviar minha filial local (clonada de outro repositório) para o repositório remoto:

pé quebrado
fonte
0

Aqui está a página oficial do github para gerenciamento remoto do github http://github.com/guides/push-a-branch-to-github . Isso o ajudará a responder todas as suas perguntas.

dylanfm
fonte
Isso não o move para a ramificação principal ou cria implicitamente um origin / same_branch_name_as_local?
Coocoo4Cocoa
0

tl; dr

$ git push --set-upstream origin your_new_branch

mais informações

depois de fazer poucos commits no seu:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

você envia sua ramificação especificando um upstream para um dos repositórios remotos, como a seguir:

$ git push --set-upstream REMOTE YOUR_BRANCH

controles remotos podem ser vistos por

$ git remote -v

normalmente, você terá um único controle remoto padrão origin. então seu comando seria semelhante a:

$ git push --set-upstream origin your_new_branch

e todos os empurrões consequentes podem ser feitos apenas com git push.

Ivan Prisyazhnyy
fonte