Rastrear uma nova ramificação remota criada no GitHub

183

Eu já tenho um ramo mestre local rastreando o ramo mestre remoto de um projeto do github. Agora, um colaborador meu criou uma nova ramificação no mesmo projeto e quero fazer o seguinte:

  1. crie uma nova ramificação localmente
  2. faça com que essa nova ramificação rastreie a ramificação remota recém-criada.

Como devo fazer isso corretamente?

MLister
fonte
2
git checkout --track -b <ramificação local> <remote> / <ramificação rastreada> também funciona.
MLister
14
... ou apenas git checkout -t <remote>/<whatever>. Se houver apenas um ramo de rastreamento remoto que termina, <whatever>você pode apenas fazer git checkout <whatever>e adivinhar o que você quer dizer.
Mark Longair

Respostas:

251
git fetch
git branch --track branch-name origin/branch-name

O primeiro comando garante que você tenha ramificação remota no repositório local. O segundo comando cria uma ramificação local que rastreia a ramificação remota. Ele assume que seu nome remoto é origine o nome da filial é branch-name.

--track A opção está ativada por padrão para ramificações remotas e você pode omiti-la.

max
fonte
3
Quando faço isso, recebo um aviso: refname 'branch-name' é ambíguo.
Ultrasaurus
19
Se houver apenas uma ramificação remota com esse nome, você pode simplesmente fazer git checkout <branchname>e o git verificará automaticamente e configurará uma ramificação de rastreamento. Só queria reiterar o que @Mark Longair disse acima neste comentário: stackoverflow.com/questions/11262703/… .
Ryan Paredes
O nome da minha filial remota é remotes/origin/develop? Não deveria ser justo origin/develop? São os mesmos?
アレックス
2
Eu tinha que fazer git fetch --all, caso contrário, novos ramos não seria improvável
mschrimpf
Como fazer isso no Eclipse? Quando eu terminar com isso cmd, o eclipse detectará o novo ramo?
quer
31

Se você não possui uma filial local, é realmente tão simples quanto:

git fetch
git checkout <remote-branch-name>

Por exemplo, se você buscar e houver um novo ramo de rastreamento remoto chamado origin/feature/Main_Page, faça o seguinte:

git checkout feature/Main_Page

Isso cria uma ramificação local com o mesmo nome da ramificação remota, rastreando essa ramificação remota. Se você tiver vários controles remotos com o mesmo nome de filial, poderá usar o menos ambíguo:

git checkout -t <remote>/<remote-branch-name>

Se você já criou a ramificação local e não deseja excluí-la, consulte Como fazer com que uma ramificação existente do Git rastreie uma ramificação remota? .

kotoole
fonte
1
git checkout 1.5-branch( remotes/upstream/1.5-branchestá na saída de git branch -a) resulta em error: pathspec '1.5-branch' did not match any file(s) known to git.Alterando isso para git checkout upstream/1.5-branchresulta em HEAD desanexado e nenhuma ramificação local é criada. Eu acho que essa parte da resposta está simplesmente errada. Isso é com git 2.4.3 #
Piotr Dobrogost
O primeiro comando funciona para mim no git 1.9.3, mesmo para diferentes controles remotos. É possível que esse comportamento tenha mudado. O resultado do seu segundo comando é o que eu esperaria. Sem -t, você não está especificando que deseja fazer outra coisa senão olhar para essa versão específica no controle remoto.
kotoole
1
Concordo com @PiotrDobrogost, acredito que sua afirmação "Isso cria uma filial local com o mesmo nome ..." está errada. O que a busca fará (quando chamada dessa maneira) é criar uma ramificação de rastreamento remoto para cada ramificação no controle remoto. Isso significa que uma filial em seu repositório local é nomeada <remote>/<branch>. Uma ramificação de rastreamento remoto é somente leitura, indicando onde estava a última ramificação no controle remoto. Chamar checkoutessa ramificação ref coloca você no modo HEAD desanexado, como Piotr diz. Observe que especificar a ramificação remota a ser buscada evita a criação de ramificações de rastreamento remoto indesejadas.
scanny
2
Para ficar claro mais uma vez: estou sugerindo o uso do comando git checkout feature-branch. NÃO estou sugerindo o uso do comando git checkout origin/feature-branch que, como vocês dois apontaram, resultará em uma cabeça desanimada inútil.
kotoole
muito mais simples e direto ao ponto. Funciona bem com o git 2.8.3 no cygwin.
Felipe Alvarez
29

Primeiro de tudo você precisa buscar o repositório remoto:

git fetch remoteName

Você pode criar o novo ramo e configurá-lo para rastrear o ramo remoto que você deseja:

git checkout -b newLocalBranch remoteName/remoteBranch

Você também pode usar "git branch --track" em vez de "git checkout -b", conforme especificado no máximo.

git branch --track newLocalBranch remoteName/remoteBranch
Anghel Contiu
fonte
Se você checkout -busar um ramo remoto como ponto de partida, será realmente desnecessário usá-lo --track.
5
Além disso, como apontado neste comentário , se você o fizer git checkout <branchname>, e houver uma ramificação remota com o mesmo nome (após a git fetch), a ramificação local será automaticamente configurada para rastrear a remota.
9

Quando a ramificação não é remota, você pode enviar sua ramificação local diretamente para o remoto.

git checkout master
git push origin master

ou quando você tem um ramo de desenvolvimento

git checkout dev
git push origin dev

ou quando a ramificação remota existir

git branch dev -t origin/dev

Existem outras possibilidades para enviar um ramo remoto.

René Höhle
fonte
Então você toma a terceira opção. Quando a ramificação remota existe, você pode criar uma ramificação local e rastrear a ramificação remota :) é igual à versão de max, mas menor.
René Höhle