Eu gostaria de fornecer uma perspectiva diferente sobre o que "git pull --rebase" realmente significa, porque às vezes parece se perder.
Se você já usou o Subversion (ou CVS), pode estar acostumado ao comportamento de "svn update". Se você tiver alterações a confirmar e a confirmação falhar porque as alterações foram feitas a montante, você "svn update". O Subversion prossegue mesclando alterações upstream com as suas, resultando potencialmente em conflitos.
O que o Subversion acabou de fazer foi essencialmente "pull --rebase". O ato de reformular suas alterações locais para que ele seja relativo à versão mais recente é a parte "rebasing" dela. Se você fez "svn diff" antes da falha na tentativa de confirmação e comparou o diff resultante com a saída de "svn diff" posteriormente, a diferença entre os dois diffs é o que a operação de rebasagem fez.
A principal diferença entre o Git e o Subversion, neste caso, é que no Subversion, "suas" alterações existem apenas como alterações não confirmadas na sua cópia de trabalho, enquanto no Git você tem confirmações reais localmente. Em outras palavras, no Git você bifurcou a história; sua história e a história a montante divergiram, mas você tem um ancestral em comum.
Na minha opinião, no caso normal de ter sua filial local simplesmente refletindo a filial upstream e desenvolvendo-a continuamente, a coisa certa a fazer é sempre "--rebase", porque é isso que você realmente está semanticamente fazendo . Você e outras pessoas estão cortando a história linear pretendida de um ramo. O fato de alguém ter empurrado um pouco antes da tentativa de empurrar é irrelevante e parece contraproducente para cada acidente de tempo resultar em mesclagens na história.
Se você realmente sente a necessidade de algo ser um ramo por qualquer motivo, essa é uma preocupação diferente na minha opinião. Mas, a menos que você tenha um desejo específico e ativo de representar suas alterações na forma de mesclagem, o comportamento padrão deve, na minha opinião, ser "git pull --rebase".
Por favor, considere outras pessoas que precisam observar e entender a história do seu projeto. Deseja que o histórico esteja repleto de centenas de fusões por todo o lado ou apenas algumas poucas fusões que representam fusões reais de esforços de desenvolvimento divergentes intencionais?