From 8a64f2e809d2ee5b0f109b01928201a86aecc44e Mon Sep 17 00:00:00 2001 From: Giuseppe Rocco Date: Fri, 5 Dec 2025 10:01:58 +0100 Subject: [PATCH] Aggiungi 'docs/04-fetch-merge-pull.md' --- docs/04-fetch-merge-pull.md | 118 ++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 docs/04-fetch-merge-pull.md diff --git a/docs/04-fetch-merge-pull.md b/docs/04-fetch-merge-pull.md new file mode 100644 index 0000000..1aeb8f8 --- /dev/null +++ b/docs/04-fetch-merge-pull.md @@ -0,0 +1,118 @@ + + +# `git fetch`, `git merge` e `git pull` – differenze + +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: + +```bash +git fetch origin +``` + +Dopo questo comando: + +* `origin/develop` ha gli ultimi commit dal server +* la tua branch `develop` locale è ancora come prima + +Puoi vedere la differenza: + +```bash +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: + +```bash +git checkout development +git fetch origin +git merge origin/development +``` + +Se non ci sono conflitti, Git può fare un **fast-forward**: + +```text +Updating 1a2b3c4..9f8e7d6 +Fast-forward + src/report.py | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) +``` + +Se ci sono conflitti, Git segnala i file: + +```bash +# 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: + +```bash +git pull +``` + +È comodo ma **meno esplicito**: non vedi distintamente fase di fetch e merge. + +### Comportamento tipico a Meridiana (consigliato) + +Per evitare sorprese: + +```bash +git fetch origin +git merge origin/ +``` + +Quindi, esempio completo: + +```bash +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 + +```bash +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" \ No newline at end of file