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 HEAD
verifica diretamente o seu commit atual, colocando você no estado head desanexado . Dessa forma, se você estiver emmaster
oudevelop
, 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:develop
usa refspecs comfetch
para avançar rapidamente as ramificaçõesmaster
edevelop
em 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 emmaster
quando 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? .