git / Guide

Risolvere un conflitto Git merge, passo per passo

Un conflitto indica che Git ha bisogno della tua decisione sul contenuto finale. Questo esercizio usa un repository separato con due modifiche alla stessa riga.

Esempi per Bash; consulta i riferimenti per i dettagli del tuo ambiente.

git — Cheat sheet

Crea il conflitto

Esegui l’esercizio in Bash, dentro una directory nuova e vuota. I nomi dei branch e il file sono limitati a questo esempio.

git init -b main
git config user.name "DevSheet Demo"
git config user.email "demo@example.invalid"
printf "colour=blue\n" > settings.txt
git add settings.txt
git commit -m "Base colour"
git switch -c feature
printf "colour=green\n" > settings.txt
git commit -am "Feature colour"
git switch main
printf "colour=red\n" > settings.txt
git commit -am "Main colour"
git merge feature

L’ultimo comando deve fermarsi con un conflitto in settings.txt. Il codice di uscita diverso da zero è previsto nell’esercizio.

Leggi le due versioni

git status --short
git diff -- settings.txt

Cerca UU settings.txt. Nel file, <<<<<<< HEAD introduce il testo del branch corrente, ======= separa le versioni e >>>>>>> feature chiude il testo in arrivo. Queste etichette descrivono un normale merge; un rebase ha un contesto diverso.

Scrivi e controlla il contenuto finale

Nell’esercizio scegli il verde. Sostituisci tutto il file in conflitto con il risultato desiderato, aggiungi solo quel file allo staging e controlla cosa verrà committato.

printf "colour=green\n" > settings.txt
git add settings.txt
git diff --cached
git merge --continue
git status --short

Salva il messaggio di merge quando si apre l’editor. Risultato atteso: stato pulito e un commit di merge. In un progetto reale combina le modifiche secondo il comportamento dell’applicazione ed esegui i controlli pertinenti prima di completare il merge.

Annulla o verifica un merge bloccato

Finché il conflitto è irrisolto, git merge --abort tenta di tornare allo stato precedente. Committa o metti nello stash il lavoro estraneo prima di iniziare: abort potrebbe non ricostruire le modifiche già presenti.

Aggiungere un file allo staging comunica a Git che lo hai risolto, anche se contiene ancora marcatori di conflitto. Leggi il diff dello staging. File binari, conflitti eliminazione/modifica e rinominazioni richiedono decisioni specifiche: sostituire una riga non copre questi casi.

Riferimenti

Tutte le guide