2013-07-03 20 views
5

Diciamo che sto lavorando su una funzione, in un ramo chiamato foo_baz.Lo squash si impegna sul master ma commette separatamente sul ramo di funzione?

Mi impegno più volte mentre lavoro sulla funzione.

Spingo periodicamente foo_baz, un ramo di monitoraggio remoto, su un repository remoto. IE origin/foo_baz.

Avanzare al punto in cui desidero unire tutti i commit da foo_baz a master e passare a origin/master. Ecco la domanda:

Posso unire foo_baz in master in modo tale che tutti i commit sono ancora separati in foo_baz 's histroy, ma che in master' storia di s, sono tutti uno, schiacciata commesso?

Edit:

Sono un po 'di un principiante git, quindi ti prego di perdonarmi se c'è qualcosa di totalmente ovvio che mi manca. Ho scavato nel web ma non sono riuscito a trovare una risposta diretta alla mia domanda.

risposta

5

Si potrebbe infatti essere alla ricerca di --squash (come nelle altre risposte), ma si potrebbe cercare --no-ff invece.

Ecco la differenza tra i due. Supponiamo che si inizia con due commit:

A --- B    <-- branch "master", when you start 

e poi fare due più sul vostro nuovo ramo foo_baz:

A --- B    <-- master 
     \ 
      C --- D  <-- foo_baz 

Now (una volta tornati su master), ci sono queste due opzioni (tra gli altri). È possibile git merge --squash foo_baz && git commit che vi darà la seguente:

A --- B ----------- E <-- master 
     \ 
      C --- D  <-- foo_baz 

oppure si può git merge --no-ff:

A --- B ----------- E <-- "master" after merge --no-ff 
     \  /
      C --- D  <-- foo_baz 

Entrambi offrono un nuovo impegno E -nel primo caso, dalla parte git commit comando, ma la il primo elimina l'azione multi-genitoriale, così che alla fine, quando guardi indietro da un anno a questa parte, sembra che tu abbia appena copiato tutte le modifiche dal ramo. L'albero (tutti i file che si ottengono quando si git checkout i rami) sarà lo stesso in entrambi D e E (in questo caso particolare comunque, dove non ci sono modifiche a B su master prima dell'azione di unione), ma loro ' re diversi commit.

La differenza da un rettilineo git merge è che quest'ultimo generalmente produrre un "avanti veloce", che assomiglia a questo:

A --- B 
     \ 
      C --- D  <-- foo_baz, master 

in cui la linea ad angolo può essere raddrizzato, dando una storia in cui sia i rami sembrano esattamente gli stessi.

0

penso che quello che vuoi è qualcosa di simile:

git merge --squash foo_baz 
git commit 
0

Penso che stai cercando per la bandiera --squash.

Problemi correlati