Você pode configurar um alias que use git fetch com refspecs para avançar rapidamente suas ramificações com apenas um comando. Configure isso como um alias no seu usuário .gitconfig file:
[alias]
sync = "!sh -c 'git checkout --quiet --detach HEAD && \
git fetch origin master:master develop:develop ; \
git checkout --quiet -'"
Uso: git sync .
Eis por que funciona:
-
git checkout --quiet HEADverifica diretamente o seu commit atual, colocando você no estado head desanexado . Dessa forma, se você estiver emmasteroudevelop, você separará sua cópia de trabalho desses ponteiros de ramificação, permitindo que eles sejam movidos (o Git não permitirá que você mova as referências de ramificação enquanto sua cópia de trabalho as verificar out). -
git fetch origin master:master develop:developusa refspecs comfetchpara avançar rapidamente as ramificaçõesmasteredevelopem seu repositório local. A sintaxe diz basicamente ao Git "aqui está um refspec do formulário<source>:<destination>, pegue<destination>e avance rapidamente para o mesmo ponto que<source>". Portanto, as origens no alias são as ramificações deorigin, enquanto os destinos são as versões de repositório locais dessas ramificações. -
Por fim,
git checkout --quiet - || git checkout --quiet -verifica o ramo em que você esteve por último, independentemente de haver ou não uma falha nos comandos anteriores. Então, se você estava emmasterquando você executougit sync, e tudo deu certo, você vai deixar o estado da cabeça desanexado e confira o recém atualizadomaster.
Veja também minha resposta para git: atualizar um ramo local sem verificar? .