2010-08-04 23 views
74

Ho appena iniziato a utilizzare GIT e penso che sia meraviglioso, tuttavia sono un po 'confuso su ciò che fa il comando merge.Unione di 2 rami insieme in GIT

Diciamo che abbiamo un progetto di lavoro nel ramo "A".

Vado a casa e apporto modifiche a questo ramo e lo salvo come "B". Un altro programmatore apporta modifiche a "A" e lo salva come "C".

C'è un modo per unire i due rami "B" e "C" insieme, quindi eseguire il commit delle modifiche come un nuovo ramo, ad esempio "D"?

O mi manca il punto di "unione"?

+0

non è necessario "salvare le modifiche" in un altro ramo. lavoro un A e poi unisco quelle A diverse insieme – knittl

+0

Non seguo. A sarebbe sul mio computer locale, dev1 avrebbe una copia di A sul suo computer e dev2 ha una copia di A sul suo computer. Entrambi gli sviluppatori apportano modifiche, come faccio a unire queste modifiche insieme? – dotty

+0

vedere . gli sviluppatori probabilmente devono spingere/caricare il loro repository da qualche parte prima – knittl

risposta

127

merge viene utilizzato per portare due (o più) rami insieme.

un piccolo esempio:

# on branch A: 
# create new branch B 
$ git checkout -b B 
# hack hack 
$ git commit -am "commit on branch B" 

# create new branch C from A 
$ git checkout -b C A 
# hack hack 
$ git commit -am "commit on branch C" 

# go back to branch A 
$ git checkout A 
# hack hack 
$ git commit -am "commit on branch A" 

quindi vi sono tre rami separati (cioè AB e C) con differenti teste

per ottenere i cambiamenti da B e C ad A, cassa A (già fatto in questo esempio) e quindi utilizzare il comando merge:

# create an octopus merge 
$ git merge B C 

vostra storia sarà quindi simile a questa:

…-o-o-x-------A 
     |\  /| 
     | B---/ | 
     \ /
     C---/ 

se si desidera unire i confini del repository/computer, dare un'occhiata al comando git pull, ad es. dal pc con il ramo A (questo esempio creerà due nuovi commit):

# pull branch B 
$ git pull ssh://host/… B 
# pull branch C 
$ git pull ssh://host/… C 
+0

Ho ricevuto un errore "conflitto di contenuti" durante l'unione dei rami. – dotty

+0

significa che entrambi i rami hanno cambiato lo stesso codice. sistemare i conflitcs, 'git add conflicting_files' e quindi' git commit' – knittl

+0

Supponiamo che il file in A contenga la parola "ciao", A lo abbia modificato in "CIAO" e B lo abbia modificato in "Ciao mondo". Quale sarebbe il risultato dell'unione di questi file? – dotty