2013-05-30 21 views
6

Sto usando il modo flusso git di gestire filiali nel mio repo, come descritto in: http://nvie.com/posts/a-successful-git-branching-model/git merge con --no-ff e --squash

Così la sequenza di comandi devo usare sarebbe come segue:

git checkout mybranch 
git pull --rebase origin develop 
git checkout develop 
git merge --no-ff mybranch 

Tuttavia, c'è una cosa che mi piacerebbe fare in modo diverso, in alcuni casi:

vorrei conservare tutti i miei commit sul mio ramo di caratteristica (mybranch), ma hanno loro raggruppati insieme (o schiacciati) dentro a un singolo diff quando si fondono in develop.

Quindi questo è quello che penso la sequenza di comandi dovrebbe essere:

git checkout mybranch 
git pull --rebase origin develop 
git checkout develop 
git merge --no-ff --squash mybranch 

sarei a fare cose sbagliate, se dovessi coniugare --no-ff con --squash?

sono riluttanti a provare questo deriva dal modo "schiacciamento" e "preservare la storia" sono requisiti ortogonali - vedi Squashing all of my commits (including merges) into one commit without altering history

La mia logica è che voglio conservare la storia su un ramo (mybranch) e suqash su un altro ramo (develop) -> perché queste azioni sono eseguite in rami separati, questo è OK.

+0

Perché non basta provare. Puoi sempre fare un 'reset' difficile se non funziona. Basta fare un ramo temporaneo al posto vecchio. Vai avanti. Provalo. Sai che vuoi ... –

risposta

1

ho provato unendo --squash e --no-ff insieme e ottenuto:

fatal: You cannot combine --squash with --no-ff. 

Un'unione git fondamentalmente è una zucca. Dopo aver risolto i conflitti, apparirà come un commit in fase di sviluppo. Il diff della revisione di unione è il risultato della risoluzione del conflitto. E sì, le modifiche su mybranch sono conservate. Basta fare "gitk mybranch &" dopo l'unione per verificare.

Oltre L'ombra è corretta. Non avere paura. Creare un nuovo ramo, giocare e vedere quali sono i risultati.

Il danno è stato eseguito nel comando "git pull --rebase origin develop".

Risposta (presuppone che si è locale sviluppare ramo sulla base di origine/sviluppare):

git checkout develop 
git pull 
git merge --no-ff mybranch 
+0

Chi è al mondo "The Shadow"? Intendevi "Cupcake"? – masotime

+0

La mia ipotesi è che qualcuno abbia cambiato il loro nome o abbia cancellato una risposta dal mio post. – cforbish