2.2 KiB
2.2 KiB
git fetch, git merge e git pull
Questi tre comandi sono spesso confusi, soprattutto da chi arriva da SVN.
git fetch
- Cosa fa: scarica gli aggiornamenti dal remote (
origin) ma non tocca la tua branch locale. - Aggiorna solo i branch “remoti” tipo
origin/develop,origin/main.
Esempio:
git fetch origin
Dopo questo comando:
origin/developha gli ultimi commit dal server- la tua branch
developlocale è ancora come prima
Puoi vedere la differenza:
git log --oneline --graph --decorate --all
git merge
- Cosa fa: unisce i commit di un branch in un altro.
- Crea un nuovo commit di merge (a meno che la storia non sia fast-forward).
Caso tipico: sei su develop e vuoi integrare gli ultimi commit dal server:
git checkout development
git fetch origin
git merge origin/development
Se non ci sono conflitti, Git può fare un fast-forward:
Updating 1a2b3c4..9f8e7d6
Fast-forward
src/report.py | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
Se ci sono conflitti, Git segnala i file:
# risolvi i conflitti modificando i file
git add file-conflitto.ext
git commit # per completare il merge
git pull
-
Cosa fa: combinazione di:
git fetchgit merge(ogit rebase, se configurato)
Comando corto:
git pull
È comodo ma meno esplicito: non vedi distintamente fase di fetch e merge.
Comportamento tipico a Meridiana (consigliato)
Per evitare sorprese:
git fetch origin
git merge origin/<nome-branch>
Quindi, esempio completo:
git checkout development
git fetch origin
git merge origin/development
Quando usare git pull
- Sei sulla branch che traccia già il remote (es.
development→origin/development) - Sai che ti va bene un merge automatico
git checkout development
git pull
Riepilogo concettuale
-
git fetch➜ "Scarica le novità dal server, ma non toccare il mio lavoro" -
git merge➜ "Integra le modifiche da un branch dentro il branch su cui sono" -
git pull➜ "Scarica e integra subito (fetch + merge) nella branch attuale"