Estou acostumado a executar o git pull e outros comandos de dentro de um ramo em que estou trabalhando. Mas eu configurei um servidor de desenvolvimento no qual várias pessoas trabalham, por isso não quero mudar de ramificação quando o fizer. Se eu quiser atualizar uma ramificação existente no servidor dev a partir do repositório github que todos usamos, qual seria a maneira correta de fazer isso? Se eu executar o comando 'git pull github branchname', isso simplesmente puxará a ramificação para a ramificação atual?
Todos os exemplos do git que posso encontrar parecem indicar que você executa 'checkout branchname' primeiro e depois executa o pull. Estou tentando evitar isso. Como eu disse, este é um ramo existente e só quero atualizar para a versão mais recente.
git fetch
deve fazer o que quiser.git fetch
atualizaria a cópia local da filial remota, mas não qualquer filial local, mesmo que uma esteja configurada para rastrear essa filial remota específica. Pode ou não ser o que se deseja. (. Edit: por padrão, de qualquer maneira É possível chamá-lo com argumentos para torná-lo comportar de maneira diferente, mas, nesse caso, os argumentos realmente deve ser salientado.)Respostas:
Eu estava procurando a mesma coisa e finalmente encontrei a resposta que funcionou para mim em outra postagem do stackoverflow: mesclar, atualizar e puxar ramificações do Git sem usar caixas
Basicamente:
git fetch <remote> <srcBranch>:<destBranch>
fonte
pull
tem parâmetros que ofetch
não:-s <strategy>
,-Xsubtree=...
o que foi um vital para mim, então isso não é um substituto equivalente. Eu tive o problema descrito aqui: congruityservice.com/blog/…, mas no meu caso, eu não queria um checkout.git pull <remote> <srcBranch>:<destBranch>
.git fetch . origin/master:master
Eu tive o mesmo problema com a necessidade de confirmar ou ocultar as alterações atuais dos recursos, fazer o checkout da ramificação principal , o
pull
comando obter tudo, desde omaster
espaço de trabalho remoto até o local , em seguida, alternar novamente para uma ramificação de recursos e executar umrebase
para atualizá-lo mestre.Para fazer tudo isso, mantenha o espaço de trabalho na ramificação do recurso e evite toda a alternância, faço o seguinte:
git fetch origin master:master
git rebase master
E faz o truque bem.
fonte
feature
e tudo o que você quer fazer é atualizar seu localmaster
para estar de acordo com a origem, SEM tocarfeature
, apenas façagit fetch origin master:master
... e é como se você fizesse stash-checkoutMaster-pull-checkoutFeature-stashPop!git merge origin/master
Se você deseja que as dicas das filiais locais sejam redirecionadas depois
git fetch
, precisará de algumas etapas adicionais.Mais concretamente, suponha que o repo github tem filiais
D
,B
,C
, emaster
(a razão para este estranho nome_agencia-set ficará claro em um momento). Você está no hostdevhost
e está em um repositório ondeorigin
está o repositório do github. Você fazgit fetch
, o que traz mais de todos os objetos e atualizaçõesorigin/D
,origin/B
,origin/C
, eorigin/master
. Por enquanto, tudo bem. Mas agora você diz que quer que aconteça alguma coisa, sobredevhost
, para locais ramosD
,B
,C
, e / oumaster
?Eu tenho essas perguntas óbvias (para mim de qualquer maneira):
B
) confirmar que o repositório remoto (github) não possui? Eles devem ser mesclados, reformulados ou ...?C
) e o diretório de trabalho e / ou o índice forem modificados, mas não confirmados?A
) e / ou ramificadas excluídas (D
)?Se a resposta para (1) for "porque
devhost
não é realmente para desenvolvimento, mas sim um espelho local que simplesmente mantém uma cópia localmente disponível do repositório do github, para que todos os nossos desenvolvedores reais possam ler rapidamente, em vez de ler lentamente de github ", você quer um" espelho "em vez de um repositório" normal ". Ele não deve ter um diretório de trabalho e, talvez, também não deva aceitar impulsos; nesse caso, as perguntas restantes desaparecem.Se houver outra resposta, (2-4) se tornará problemático.
De qualquer forma, aqui está uma maneira de lidar com a atualização de referências locais com base em referências remotas (após a execução,
git fetch -p
por exemplo):O que se passa na
... code here ...
seção depende das respostas às perguntas (2-4).fonte
Usar
em vez de. Ele atualiza as referências e objetos remotos no seu repositório, mas deixa as ramificações locais, HEAD e a árvore de trabalho em paz.
fonte
EDIT: Use 'git pull' Ele buscará todos os ramos do repositório e também será atualizado para o mais recente se o ramo sair no sistema local apenas para o ramo atual. Nota: git pull é equivalente a buscar + mesclar, que busca todos os ramos, mas mescla apenas o ramo atual.
fonte
pull
faz uma busca (que, sim, busca tudo no controle remoto), mas depois mescla apenas o ramo atual .