Nell’articolo precedente abbiamo spiegato come lavorare in un TEAM con i comandi git push e git pull, oggi vogliamo parlarvi in modo più approfondito del comando git merge.

Branch e Merge – approfondimento

Sviluppando codice e lavorando su un progetto con diversi collaboratori spesso si può incappare nel problema dei conflitti. Con git è possibile risolvere il problema.

Esempio

git merge added_raw
Auto-merging dolt.py
CONFLICT (content): Merge conflict in dolt.py
Automatic merge failed; fix conflicts and then commit the result.

E’ possibile trovare i conflitti nel file di riferimento dove Git aggiunge un markup <<<<<<< seguito da un commit (principalmente HEAD)

<<<<<<< HEAD
def _handle_response(self, response, data=[], raw=False):
return data if raw else simplejson.loads(data)
=======
def _handle_response(self, response, raw=False, data=[]):
if raw:
return data
return simplejson.loads(data)
>>>>>>> added_raw

Dopo aver sistemato i conflitti, mantendendo il codice corretto, è possibile chiamare

git add

e

git commit

come si fa normalmente.

Tool Visuale per il Merge di Git

E’ possibile anche gestire i conflitti con un tool visuale.

Utilizzare il comando

git mergetool

che lancia il tool visuale. Questo mostra ogni versione del codice e permette di scegliere quale versione si desidera mantenere (codice in locale – a sinistra -, codice in remoto – a destra – o entrambi).

Esempio

git mergetool merge tool
candidates: opendiff kdiff3 tkdiff xxdiff meld
tortoisemerge gvimdiff diffuse ecmerge p4merge araxis emerge vimdiff
Merging the files: dolt.py
Normal merge conflict for 'dolt.py':
{local}: modified
{remote}: modified
Hit return to start merge resolution tool (opendiff)

E’ possibile impostare un mergetool come di deault:

git config --global merge.tool "gvimdiff"

Git Visual Merge Tool
Nascondere temporaneamente in cambiamenti

git stash

nasconde i cambiamenti del codice non ancora pronti per essere committati, e successivamente da la possibilità di recuperarli. Se non viene passato nessun parametro, questo comando crea un nuovo stash.

Applicare uno stash al “working tree” mantenendo i cambiamenti nello stash

git stash apply

altrimenti usare

git stash pop

per applicare i cambiamenti al ”working tree” e rimuoverli dallo stash

Vedere la lista degli stash disponibili:

git stash list

Creare uno stash in modalità patch

git stash save --patch

Eliminare gli stashes

git stash drop <stash name>

Eliminare i cambiamenti nello stash

git stash clear

Creare un branch da uno stash esistente

git stash branch [<stash name>]

Condividere commit tra vari branch

A volte è necessario prendere un commit da un altro branch e unirlo al branch locale, è possibile farlo con il comando

git cherry-pick

Normalmente questo comando crea un nuovo commit, ma se si vuole cambiare il messaggio del commit si può usare

git cherry-pick -e|--edit <some commit ID>

Merge di un singolo commit da un altro branch

git cherry-pick <some commit ID>

Cherry-pick senza commit

git cherry-pick —no-commit|-n <some commit ID>

Nel prossimo articolo parleremo del comando rebase , di cosa si può fare con esso e di come è possibile vedere la storia di una repository attraverso i log.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *