Quando você executa git pull
na master
ramificação, ela geralmente é retirada origin/master
. Estou em um ramo diferente chamado newbranch
, mas preciso executar um comando que faça a git pull
partir de origin/master
para dentro, master
mas não posso executar git checkout
para alterar o ramo selecionado até que a solicitação seja concluída. Existe uma maneira de fazer isso?
Para fornecer alguns antecedentes, o repositório armazena um site. Fiz algumas alterações newbranch
e as implantei alternando o site para newbranch
. Agora, essas alterações foram mescladas a montante na master
filial, também estou tentando alternar o site para a master
filial. Neste ponto, newbranch
e origin/master
são idênticos, mas master
estão atrasados origin/master
e precisam ser atualizados. O problema é que, se eu fizer da maneira tradicional:
$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
Preciso fazer o mesmo que acima ( git checkout master && git pull
), mas sem alterar o diretório de trabalho para uma revisão anterior durante o processo.
fonte
newbranch
e não há nada para esconder!git fetch; git merge origin/master
de dentronewbranch
. Não há benefício em clonar uma segunda cópia inteira do repositório.Respostas:
Você tem uma árvore de trabalho na qual não quer tocar, então use outra. O clone é barato, foi criado para isso.
O problema com todas as outras respostas aqui é que elas não funcionam. Se você precisar da mesclagem ou reorganização para a qual você possui a configuração pull, precisará de outra árvore de trabalho e do procedimento acima. Caso contrário, apenas
git fetch; git checkout -B master origin/master
fará.fonte
git checkout master
você fará o checkout domaster
ramo antigo porque não fez umgit pull
namain
pasta para sincronizá-lo com a origem / mestre. É isso que estou tentando evitar.master
volta paraorigin
, mas não acredito que seu checkout final seja atualizadomaster
. Não hágit pull
como atualizar amaster
ramificação nomain
diretório, portanto, a menos que esteja faltando algo, seus comandos não são diferentes de apenas executargit checkout master
por conta própria e obter amaster
árvore antiga . Se você observar atentamente, não está executando nenhum comando nomain
diretório que se comunica a montante (exceto a linha 1, que é executada antes de você fazer alterações noDireto: Atualizando de uma ramificação remota para um mestre de ramificação atualmente sem check-out :
onde a origem é seu controle remoto e você está atualmente com check-out em algum ramo, por exemplo, dev .
Se você deseja atualizar sua ramificação atual, além da ramificação especificada de uma só vez:
fonte
Isso é respondido aqui: Mesclar, atualizar e puxar ramificações do Git sem usar caixas
fonte
git fetch origin master:master
.git fetch
por si só presumiria que você pretendia atualizar o ramo atual e não outro ramo.Como se vê, a resposta é enganosamente simples:
Isso permite que você atualize o
master
ramo sem mudar para ele até depois ele foi atualizado.fonte
Você está preocupado com algo que não pode ser corrigido, pois as operações do Git não são atômicas. Você sempre terá um furo no qual seu diretório de trabalho fica a meio caminho entre as ramificações, mesmo se você atualizar o mestre sem primeiro alternar para ele. É por isso que o Git não é uma ferramenta de implantação .
Como você não está realmente comprometendo o código em seu ambiente de produção (espero), na verdade, não é necessário fazer check-out de uma filial. Você pode simplesmente fazer um a
git fetch
para atualizar suas referências remotas e, em seguida,git checkout origin/master
mover o diretório ativo diretamente para o commit atualmente apontado pororigin/master
. Isso colocará você em um estado principal desanexado, mas, novamente, como você não está enviando código, isso não importa.Esse é o menor buraco que você terá, mas, como eu disse, ainda existe;
checkout
não é atômico.fonte
origin/master
, porém, que pode apenas fazer o truque.git fetch
antes de fazer qualquer outra coisa e tirar a transferência real dos dados.Você pode usar update-ref para isso:
Observe que isso descartaria quaisquer confirmações locais na ramificação principal. No seu caso, não haverá nenhum, então tudo bem. Para outras pessoas que tentam fazer isso onde há confirmações locais, acho que não é possível, pois a mesclagem só pode ser executada na ramificação atual.
fonte
git branch --force master origin/master
? Isso força o chefe localmaster
para apontar para a cabeça deorigin
smaster
A solução da Malvineous funciona para mim
Apenas em dar o erro
Então eu corro com a opção -D
obrigado
fonte
git fetch origin master:master
master
.master
que ainda não foram enviadas,origin/master
será mesclado ao seu mestre.fonte