Considera la seguente situazione:
- Hai un clone di un repository git
- Hai alcuni commit locali (commit che non sono stati ancora spinti da nessuna parte)
- Il repository remoto ha nuovi commit che non hai ancora riconciliato
Quindi qualcosa del genere:
Se esegui git pull
le impostazioni predefinite, otterrai qualcosa del genere:
Questo perché git ha eseguito un'unione.
C'è un'alternativa, però. Puoi dire a pull di fare un rebase invece:
git pull --rebase
e otterrai questo:
A mio avviso, la versione ridisegnata presenta numerosi vantaggi che si concentrano principalmente sulla pulizia del codice e della cronologia, quindi sono un po 'colpito dal fatto che git si fonda per impostazione predefinita. Sì, gli hash dei tuoi commit locali verranno cambiati, ma questo sembra un piccolo prezzo da pagare per la cronologia più semplice che ottieni in cambio.
Non sto affatto suggerendo che questo sia in qualche modo un default cattivo o sbagliato. Ho solo problemi a pensare ai motivi per cui l'unione potrebbe essere preferita per impostazione predefinita. Abbiamo qualche idea sul perché sia stato scelto? Ci sono vantaggi che lo rendono più adatto come predefinito?
La motivazione principale per questa domanda è che la mia azienda sta cercando di stabilire alcuni standard di base (si spera, più come linee guida) per il modo in cui organizziamo e gestiamo i nostri repository per facilitare agli sviluppatori l'approccio a un repository con cui non hanno mai lavorato prima. Sono interessato a sostenere che dovremmo in genere ribattere in questo tipo di situazione (e probabilmente per aver raccomandato agli sviluppatori di impostare la loro configurazione globale su rebase per impostazione predefinita), ma se mi fossi opposto a questo, certamente mi chiederei perché rebase non è ' t il default se è così grande. Quindi mi chiedo se c'è qualcosa che mi manca.
È stato suggerito che questa domanda è un duplicato di Perché molti siti Web preferiscono "git rebase" piuttosto che "git merge"? ; tuttavia, questa domanda è in qualche modo il contrario di questa. Discute i meriti di rebase su merge, mentre questa domanda pone i vantaggi di merge over rebase. Le risposte lì riflettono questo, concentrandosi sui problemi con l'unione e i benefici di rebase.