2010-03-30 10 views
5

Ho bisogno di unire tra dev e master frequentemente.strategia git per avere un insieme di commit limitato a un particolare ramo

Ho anche un commit che devo applicare a dev solo, affinché le cose funzionino localmente.

In precedenza ho fuso solo da dev in master, quindi ho avuto un branch_changes di produzione che conteneva il "commit di annullamento" del commit speciale dev. e dal maestro, ho unito questo. Usato per lavorare bene.

Ora ogni volta che ho unione da dev per padroneggiare e viceversa, sto avendo a cherry-pick e applicare lo stesso commettono ancora e ancora :(. Il che è brutto.

Quale strategia posso adattare in modo che posso senza soluzione di continuità si fondono tra 2 rami, mantenendo tuttavia alcune delle modifiche solo su uno di quei rami?

risposta

1

mi sento di raccomandare un merge driver (script dichiarati in una direttiva di fusione all'interno di un file .gitattributes) al fine di evitare che determinati file essere interessati da un dato commit
(ad esempio, se determinati file mu Non modificato, questo driver sarebbe semplice come un "keep mine" merge. Che è stato usato per merge only specific directories per esempio, o per tenere traccia config files are managed per filiale)

il PO aggiunge:.

ma cerco di più per una soluzione intelligente, se ne esiste uno, come "creare un ramo che ha l'undo commettere solo ed applicarlo a padroneggiare, fingere su dev"

soluzione intelligente ...
bene posso proporre git rerere (riutilizzo risoluzione registrata di merge conflittuale:? se si uniscono a dev innescare un conflitto e se la risoluzione di quel conflitto si sta effettivamente annullando tale unione, è possibile registrare tale risoluzione, in modo da averla ripetuta automaticamente durante la successiva fusione.

Vedere Rerere Your Boat... per Scott Chacon per ulteriori informazioni in questo comando.

+0

Dovrebbe funzionare, ma sto cercando più una soluzione intelligente, se ne esiste una, come "creare un ramo che ha l'annullamento solo commit e applicarlo al master, fingilo su dev" –

+0

@becomingGuru: ho appena completato la mia risposta con 'git rerere' nel caso in cui potrebbe aiutare. – VonC

0

Lo farei con una filiale locale (che non è mai stata spinta da nessuna parte) nel repository di sviluppo che avrei rebase all'inizio del ramo dev ogni volta che ho estratto dal master. Non è del tutto senza soluzione di continuità, ma penso che sia un po 'meglio del cherry-picking.

+0

Anche se si esegue il rebase all'ultimo master, un po 'di tempo, è necessario unire il master quando questo commit entra. –

1

Lie to git: crea il diff in un ramo separato radicato nel punto di diramazione del ramo 'dev'. Poi "merge" in padrone senza padrone in realtà cambiare: qualcosa di simile git merge -s ours devfix-branch (si esegue questa operazione su master)

Tornare su dev e unire normalmente: git merge devfix-branch. Ora sia dev sia master penseranno di avere già lo svaligramma e puoi continuare a unire per padroneggiare.

Viene lasciato al lettore la possibilità di vedere se questo funziona effettivamente o può essere fatto funzionare.

+0

Fantastico! Grazie! La prossima volta voglio fare una cosa del genere, questo è quello che userò. Per ora, ho risolto il problema utilizzando alcuni file non controllati e ci prendiamo cura delle modifiche, in modo che l'unione sia perfetta! –

Problemi correlati