Você não pode fazer isso com apenas um comando git, mas pode automatizá-lo com uma linha bash.
Para atualizar com segurança todos os ramos com uma linha, eis o que eu faço:
git fetch --all && for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*') ; do git checkout $branch && git merge --ff-only || break ; done
Se não conseguir avançar rapidamente um ramo ou encontrar um erro, ele o interromperá e o deixará nesse ramo, para que você possa retomar o controle e mesclar manualmente.
Se todas as ramificações puderem avançar rapidamente, ela terminará com a ramificação em que você estava atualmente, deixando-o onde estava antes de atualizar.
Explicações:
Para uma melhor legibilidade, ele pode ser dividido em várias linhas:
git fetch --all && \
for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*')
do git checkout $branch && \
git merge --ff-only || break
done
git fetch --all && ... => Busca todas as referências de todos os controles remotos e continua com o próximo comando, se não houver erro.
git branch | sed '/*/{$q;h;d};$G' | tr -d '*'=> Na saída de git branch, sedpegue a linha com a *e mova-a para o final (para que a ramificação atual seja atualizada por último). Em seguida, trbasta remover o *.
for branch in $(...) ; do git checkout $branch && git merge --ff-only || break ; done=> Para cada nome de ramificação obtido do comando anterior, faça check-out dessa ramificação e tente mesclar com um avanço rápido. Se falhar, breaké chamado e o comando para aqui.
Claro, você pode substituir git merge --ff-onlypor git rebasese é o que você deseja.
Finalmente, você pode colocá-lo no seu bashrc como um alias:
alias git-pull-all='git fetch --all && for branch in $(git branch | sed '\''/*/{$q;h;d};$G'\'' | tr -d "*") ; do git checkout $branch && git merge --ff-only || break ; done'
Ou, se você tem medo de estragar o 'e ", ou simplesmente prefere manter a legibilidade sintática no seu editor, pode declarar isso como uma função:
git-pull-all()
{
git fetch --all && for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*') ; do git checkout $branch && git merge --ff-only || break ; done
}
Bônus:
Para aqueles que gostariam da explicação da sed '/*/{$q;h;d};$G'parte:
/*/=> Procure a linha com a *.
{$q => Se estiver na última linha, saia (não precisamos fazer nada porque o ramo atual já é o último na lista).
;h;d} => Caso contrário, armazene a linha no buffer de espera e exclua-a na posição atual da lista.
;$G => Quando atingir a última linha, acrescente o conteúdo do buffer de retenção.