Sei como criar uma nova ramificação que rastreia ramificações remotas, mas como faço para que uma ramificação existente rastreie uma ramificação remota?
Eu sei que posso apenas editar o .git/config
arquivo, mas parece que deve haver uma maneira mais fácil.
git
branch
git-branch
Pat Notz
fonte
fonte
git push -u origin branch-name
.git pull
muitas vezes, fornecer mensagens úteis sobre o comando adequado para definir as informações de rastreamentogit branch --set-upstream-to origin/<branch>
--set-upstream
produz um erro:fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
assimgit branch --set-upstream-to origin/<branch name>
como o comando atual que funciona.Respostas:
Dada uma ramificação
foo
e um controle remotoupstream
:A partir do Git 1.8.0:
Ou, se a ramificação local
foo
não for a ramificação atual:Ou, se você deseja digitar comandos mais longos, estes são equivalentes aos dois acima:
A partir do Git 1.7.0:
Notas:
foo
rastreie a filialfoo
remotaupstream
.git fetch upstream
antecipadamente.Veja também: Por que eu preciso fazer o `--set-upstream` o tempo todo?
fonte
git branch --set-upstream master origin/master
seria equivalente ao que é feito automaticamente quando você clona inicialmente um repositório.git push -u origin foo
viaVocê pode fazer o seguinte (supondo que você fez check-out no master e deseja enviar para um master de filial remota):
Configure o 'remoto' se ainda não o tiver
Agora configure o mestre para saber como rastrear:
E empurre:
fonte
error: the requested upstream branch 'upstream/master' does not exist
.origin
e nãoupstream
.Faço isso como um efeito colateral de pressionar com a
-u
opção como emA opção longa equivalente é
--set-upstream
.O
git-branch
comando também entende--set-upstream
, mas seu uso pode ser confuso. A versão 1.8.0 modifica a interface.Digamos que você tenha uma
foo
filial local e queira que ela trate a filial com o mesmo nome que a montante. Faça isso acontecer comou apenas
fonte
--set-upstream-to=...
é exatamente o que eu estava procurando.Você pode achar a
git_remote_branch
ferramenta útil. Oferece comandos simples para criar, publicar, excluir, rastrear e renomear filiais remotas. Um recurso interessante é que você pode pedir a umgrb
comando para explicar quais comandos git ele executaria.fonte
Na verdade, para que a resposta aceita funcione:
fonte
Acredito que já no Git 1.5.x você poderia fazer uma filial local
$BRANCH
rastrear uma filial remotaorigin/$BRANCH
, como esta.Dado isso
$BRANCH
eorigin/$BRANCH
existe, e você não fez o check-out no momento$BRANCH
(mude se tiver), faça:Isso recria
$BRANCH
como um ramo de rastreamento. As-f
forças a criação apesar de$BRANCH
já existir.--track
é opcional se os padrões usuais estiverem em vigor (ou seja, o parâmetro git-configbranch.autosetupmerge
é verdadeiro).Observe que, se
origin/$BRANCH
ainda não existir, você poderá criá-lo colocando seu local$BRANCH
no repositório remoto com:Seguido pelo comando anterior para promover a filial local em uma filial de rastreamento.
fonte
git push origin $BRANCH
era o que eu estava procurando.git branch -f --track $BRANCH origin/$BRANCH
faz o truque.1- atualize seus meta-dados locais usando: git fetch --all
2- mostre suas filiais remotas e locais usando: git branch -a , veja a seguinte captura de tela
3- alterne para o ramo de destino que você deseja vincular ao controle remoto: usando
git checkout branchName
exemplo:
4- Conecte sua filial local a uma filial remota usando:
git branch --set-upstream-to nameOfRemoteBranch
NB: nameOfRemoteBranch : para copiar da saída da etapa 2 "git branch -r"
Exemplo de uso:
fonte
Certifique-se de executar:
ser capaz de empurrar sem problemas
fonte
git-config(1)
a página do manual,tracking
é um sinônimo obsoleto deupstream
.A edição
.git/config
é provavelmente a maneira mais fácil e rápida. É o que os comandos do Git para lidar com ramificações remotas estão fazendo, de qualquer maneira.Se você não quiser mexer com o arquivo manualmente (e não é tão difícil de fazer), você sempre pode usá
git config
-lo ... mas, novamente, isso vai editar o.git/config
arquivo de qualquer maneira.É claro que existem maneiras de rastrear automaticamente uma ramificação remota ao usar
git checkout
(passando a--track
bandeira, por exemplo), mas esses comandos funcionam com novas ramificações, não as existentes.fonte
Em muito curto
Isso fará com que você
yourLocalBranchName
rastreie o ramo remoto chamadodevelop
.fonte
git push -u origin branch
(ou--set-upstream-to
) em vez #--set-upstream
e--track
? Não entendo muito bem por que devo usar um sobre o outro.No 1.6.x, isso pode ser feito usando a ferramenta git_remote_branch :
Isso fará com que o Git faça o
foo
rastreamentoupstream/foo
.fonte
Eu uso o seguinte comando (suponha que o nome da filial local seja "branch-name-local" e o nome da filial remota seja "branch-name-remote"):
Se as ramificações local e remota tiverem o mesmo nome, faça o seguinte:
fonte
Aqui, usando
github
egit version 2.1.4
, basta fazer:E os controles remotos vêm por si só, mesmo que não estejam vinculados localmente:
Mas é claro, ainda não há filial local:
Vejo? Agora, se você fizer o check-out develp, ele fará a mágica automaticamente:
Tão fácil!
Resumo. Basta executar estes 2 comandos:
fonte
Use a opção '--track'
Após um
git pull
:git checkout --track <remote-branch-name>
Ou:
git fetch && git checkout <branch-name>
fonte
Para criar uma nova ramificação, poderíamos usar o seguinte comando
Para que o ramo já criado crie um link entre remoto e, a partir desse ramo, use o comando abaixofonte
Esta não é uma resposta direta a esta pergunta, mas gostaria de deixar uma nota aqui para qualquer pessoa que esteja com o mesmo problema que eu ao tentar configurar uma ramificação upstream.
Desconfie de push.default .
Nas versões mais antigas do git, o padrão era correspondente , o que causaria um comportamento muito indesejável se você tivesse, por exemplo:
Rastreamento "mestre" da filial local até a origem / mestre
Rastreamento remoto "upstream" da ramificação para upstream / master
Se você tentar "git push" quando estiver no ramo "upstream", com a correspondência push.default, o git tentará mesclar automaticamente o branch local "master" em "upstream / master", causando muito caos.
Isso fornece um comportamento mais sensato:
git config --global push.default upstream
fonte
De uma maneira um pouco relacionada, eu estava tentando adicionar uma ramificação de rastreamento remoto a uma ramificação existente, mas não tinha acesso a esse repositório remoto no sistema em que desejava adicionar essa ramificação de rastreamento remoto (porque geralmente exporto uma cópia deste repo via sneakernet para outro sistema que tenha acesso para enviar para esse controle remoto). Descobri que não havia como forçar a adição de uma ramificação remota no local que ainda não havia sido buscada (o local não sabia que a ramificação existia no remoto e eu receberia o erro
the requested upstream branch 'origin/remotebranchname' does not exist
:).No final, consegui adicionar a nova ramificação remota desconhecida anteriormente (sem buscar) adicionando um novo arquivo de cabeçalho em
.git/refs/remotes/origin/remotebranchname
e depois copiando o ref (o globo ocular era mais rápido, mais coxo ;-) do sistema com acesso à origem repo para a estação de trabalho (com o repo local em que eu estava adicionando a filial remota).Feito isso, eu poderia usar
git branch --set-upstream-to=origin/remotebranchname
fonte
ou simplesmente por:
mude para o ramo se você ainda não estiver nele:
corre
e você está pronto para:
Você já pode dar uma olhada no arquivo de configuração para ver o que está rastreando o que, executando:
Também é bom saber disso, mostra quais ramificações são rastreadas e quais não são. :
fonte
Para quem, como eu, apenas deseja sincronizar o nome da sua filial local com o nome da filial remota, aqui está um comando útil:
fonte
Para evitar lembrar o que você precisa fazer sempre que receber a mensagem:
Você pode usar o seguinte script que define a origem como upstream para a ramificação atual você está.
No meu caso, quase nunca defini outra coisa senão a origem como o upstream padrão . Também quase sempre mantenho o mesmo nome de filial para filial local e remota. Então, o seguinte me cabe:
fonte
Isso também funcionaria
fonte