Sobes.tech
Middle

Qual è la differenza tra i comandi merge e rebase nel sistema di controllo versione Git?

sobes.tech AI

Risposta dell'AI

merge unisce i rami creando un nuovo commit con due genitori, mantenendo la storia delle modifiche. rebase sposta i commit di un ramo sopra un altro, ordinando linearmente la storia, ma modificando gli hash dei commit.

  • Con merge:

    • Viene creato un nuovo commit di merge.
    • La storia dei rami rimane esplicita.
    • Possono verificarsi conflitti, risolti nel nuovo commit.
    # Esempio di utilizzo di merge
    git checkout ramo-funzionalita
    git merge main
    # Risoluzione dei conflitti, se presenti
    git commit -m "Unisci main nel ramo-funzionalita"
    
  • Con rebase:

    • I commit "si spostano" e vengono applicati sopra il ramo di destinazione.
    • La storia diventa lineare, può sembrare "più pulita".
    • Gli hash dei commit spostati cambiano.
    • Potrebbe verificarsi un conflitto per ogni commit spostato.
    • Non raccomandato per rami già pubblicati e usati da altri sviluppatori, poiché modifica la storia.
    # Esempio di utilizzo di rebase
    git checkout ramo-funzionalita
    git rebase main
    # Risoluzione dei conflitti, se presenti (ripetere per ogni commit in conflitto)
    git add .
    git rebase --continue
    # o git rebase --skip per saltare il commit
    # o git rebase --abort per annullare
    
Caratteristica merge rebase
Cambiamento storico Mantiene la storia La modifica (sovrascrive)
Commit Crea un commit di merge Sposta i commit esistenti
Linearità della storia No (le diramazioni divergono) Sì (semplifica la storia)
Approccio Non distruttivo Potenzialmente distruttivo
Applicabilità Rami pubblici e condivisi Rami locali e personali