Files
git-cheatsheet-ita/docs/04-fetch-merge-pull.md
T

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/development, origin/master.

Esempio:

git fetch origin

Dopo questo comando:

  • origin/development ha gli ultimi commit dal server
  • la tua branch development locale è 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 development 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:

    1. git fetch
    2. git merge (o git rebase, se configurato)

Comando corto:

git pull

È comodo ma meno esplicito: non vedi distintamente fase di fetch e merge.

Comportamento 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. developmentorigin/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"