Essa resposta foi revisada, pois meu entendimento, diagramas e conclusões estavam incorretos.
git pull
causa commits de mesclagem porque git está mesclando. Isso pode ser alterado configurando seus branches para usar rebase em vez de merge. Usar rebase em vez de mesclar em um pull fornece um histórico mais linear para o repositório compartilhado. Por outro lado, os commits de mesclagem mostram os esforços de desenvolvimento paralelo no branch.
Por exemplo, duas pessoas estão trabalhando na mesma filial. A filial começa como:
...->C1
A primeira pessoa termina o trabalho e segue para o galho:
...->C1->C2
A segunda pessoa termina o trabalho e quer empurrar, mas não pode porque precisa atualizar. O repositório local para a segunda pessoa se parece com:
...->C1->C3
Se o pull estiver configurado para mesclar, o repositório da segunda pessoa será semelhante a.
...->C1->C3->M1
\ /
->C2->
Onde M1 é um commit de mesclagem. Este novo histórico de branch será enviado ao repositório. Se, em vez disso, o pull for definido para realocar o repositório local terá a seguinte aparência:
...->C1->C2->C3
Não há commit de mesclagem. A história se tornou mais linear.
Ambas as opções refletem a história do ramo. git permite que você escolha o histórico de sua preferência.
De fato, existem lugares onde o rebase pode causar um problema com branches remotos. Este não é um desses casos. Preferimos usar rebase, pois simplifica um histórico de branch já complicado e também mostra uma versão do histórico em relação ao repositório compartilhado.
Você pode definir branch.autosetuprebase = sempre para que o git estabeleça automaticamente seus branches remotos como rebase em vez de master.
git config --global branch.autosetuprebase always
Essa configuração faz com que o git crie automaticamente uma definição de configuração para cada branch remoto:
branch.<branchname>.rebase=true
Você mesmo pode definir isso para suas filiais remotas que já estão configuradas.
git config branch.<branchname>.rebase true
Gostaria de agradecer a @LaurensHolst por questionar e buscar minhas declarações anteriores. Eu certamente aprendi mais sobre como o git funciona com pull e merge commits.
Para obter mais informações sobre commits de mesclagem, você pode ler Contribuindo para um projeto no ProGit-Book . A seção Private Small Team mostra os commits de mesclagem.
git log --no-merges