Questa risposta è stata rivista, poiché la mia comprensione, i diagrammi e le conclusioni non erano corrette.
git pull
causa i commit di merge perché git si sta unendo. Questo può essere cambiato impostando i tuoi rami per usare rebase invece di merge. L'utilizzo di rebase invece di merge su un pull fornisce una cronologia più lineare al repository condiviso. D'altra parte, i commit di unione mostrano gli sforzi di sviluppo paralleli nel ramo.
Ad esempio, due persone stanno lavorando sullo stesso ramo. Il ramo inizia come:
...->C1
La prima persona termina il proprio lavoro e si avvia alla filiale:
...->C1->C2
La seconda persona termina il proprio lavoro e vuole spingere, ma non può perché ha bisogno di aggiornare. Il repository locale per la seconda persona ha il seguente aspetto:
...->C1->C3
Se il pull è impostato per unire, il secondo repository di persone sarà simile.
...->C1->C3->M1
\ /
->C2->
Dove M1 è un merge commit. Questa nuova cronologia del ramo verrà inviata al repository. Se invece, il pull è impostato per rebase il repository locale sarebbe simile a:
...->C1->C2->C3
Non vi è alcun commit di unione. La storia è stata resa più lineare.
Entrambe le scelte riflettono la storia della filiale. git ti permette di scegliere quale cronologia preferisci.
Ci sono effettivamente posti in cui il rebase può causare un problema con i rami remoti. Questo non è uno di quei casi. Preferiamo usare rebase in quanto semplifica una cronologia di branch già complicata e mostra una versione della cronologia relativa al repository condiviso.
Puoi impostare branch.autosetuprebase = sempre per fare in modo che git stabilisca automaticamente i tuoi rami remoti come rebase invece che come master.
git config --global branch.autosetuprebase always
Questa impostazione fa in modo che git crei automaticamente un'impostazione di configurazione per ogni ramo remoto:
branch.<branchname>.rebase=true
Puoi impostarlo tu stesso per i tuoi rami remoti già configurati.
git config branch.<branchname>.rebase true
Vorrei ringraziare @LaurensHolst per aver messo in discussione e seguito le mie precedenti dichiarazioni. Ho sicuramente imparato di più su come git funziona con i commit pull e merge.
Per ulteriori informazioni sui commit di unione, puoi leggere Contribuire a un progetto in ProGit-Book . La sezione Private Small Team mostra i commit di unione.
git log --no-merges