Sobes.tech
Middle

Care este diferența dintre comenzile merge și rebase în sistemul de control al versiunilor Git?

sobes.tech AI

Răspuns de la AI

merge unește ramurile creând un nou commit cu doi părinți, păstrând istoricul modificărilor. rebase mută commit-urile unui ram peste altul, ordonând istoria liniar, dar schimbând hash-urile commit-urilor.

  • La merge:

    • Se creează un nou commit de îmbinare.
    • Istoricul ramurilor rămâne explicit.
    • Pot apărea conflicte, rezolvate în noul commit.
    # Exemplu de utilizare merge
    git checkout ramură-funcționalitate
    git merge main
    # Rezolvarea conflictelor, dacă există
    git commit -m "Îmbinare main în ramură-funcționalitate"
    
  • La rebase:

    • Commit-urile "se mută" și se aplică peste ramura țintă.
    • Istoria devine liniară, poate părea "mai curată".
    • Hash-urile commit-urilor mutate se schimbă.
    • Pot apărea conflicte pentru fiecare commit mutat.
    • Nu se recomandă pentru ramurile deja publicate și utilizate de alți dezvoltatori, deoarece modifică istoria.
    # Exemplu de utilizare rebase
    git checkout ramură-funcționalitate
    git rebase main
    # Rezolvarea conflictelor, dacă există (repetă pentru fiecare commit în conflict)
    git add .
    git rebase --continue
    # sau git rebase --skip pentru a omite commit-ul
    # sau git rebase --abort pentru a anula
    
Caracteristică merge rebase
Schimbare istorie Păstrează istoria O schimbă (suprascrie)
Commit-uri Creează un commit de merge Mută commit-urile existente
Liniaritatea istoriei Nu (ramurile diverg) Da (simplifică istoria)
Abordare Non-distructiv Potențial distructiv
Aplicabilitate Ramuri publice și comune Ramuri locale și personale