2015-04-14 8 views
5

Durante lo sviluppo di un ramo di funzionalità localmente, è emerso che la funzionalità richiede enormi cambiamenti. Al fine di ridurre al minimo la quantità di lavoro e di stress durante l'unione, ho pensato di unire prima il master locale nel mio ramo, risolvere tutti i conflitti e quindi unire la mia funzione in master, che dovrebbe quindi essere un avanzamento rapido e facile.È sicuro in Git pre-unire il master nel mio branch di funzionalità prima dell'unione finale?

Questa unione espone il rischio di perdere le modifiche di qualcuno? Raccomanda un altro approccio?

risposta

2

Normalmente rebase le funzioni sopra il master, questo rende più semplice per la persona che ha bisogno di unirle. Comunque non importa in che direzione lo fai - anche quando non ottieni conflitti di fusione, devi comunque testarlo. Non puoi mai credere che sia sicuro.

+0

Rebase riscrive la cronologia, quindi la mia comprensione è che va bene solo per la prima volta, fino a quando il mio locale cambia terreno in repository.È corretto? – user776686

+0

Sì, se i commit sono stati inseriti, rebase non deve essere utilizzato (ci sono eccezioni, ad esempio, se sei sicuro che nessun altro ha recuperato e utilizzato il tuo ramo, allora potresti usare rebase e fare un push forzato). – dunni

+0

Non vedo un problema nella ridefinizione dei rami delle funzionalità. Soprattutto perché nessuno si sarebbe separato da loro. Ma se vuoi essere più attento puoi spingere il cambiamento come nuovo ramo. Tuttavia la maggior parte degli strumenti (come Gerrit o Github PR) consente/prevede di aggiornare i rami esistenti. – eckes

2

Questo approccio è totalmente accettabile (e l'ho usato io stesso alcune volte per lo stesso motivo che hai menzionato). Ovviamente, quando risolvi i conflitti, devi fare attenzione a quali cambiamenti mantengono. Se fai qualche errore qui, i cambiamenti da altri sviluppatori potrebbero andare persi (ma sono sempre tenuti nella cronologia, così puoi facilmente identificare e recuperare le modifiche).

0

Lo farei solo se il ramo di funzione è non in procinto di essere unito in master. Suggerirei di unire regolarmente upstream al ramo delle funzionalità per ridurre al minimo il lavoro richiesto per le fusioni durante e dopo lo sviluppo. Tuttavia, se ti unisci indietro, non ha senso fondersi in un modo e immediatamente nell'altro senso. La semplice fusione in master rende più chiara la tua intenzione.

Un altro motivo per cui unire a monte il ramo di funzionalità è, a volte, ad esempio, dopo che un'altra funzionalità è stata incorporata in upstream, i rami sono così divergenti che ho bisogno di almeno un commit dopo l'unione per rendere tutto lavorare di nuovo. Questo è qualcosa che dovrebbe essere fatto sul ramo delle funzionalità.

Poiché tutte queste operazioni sono veloci ed economiche, di solito cerco di unirmi al master e se vedo che questo è solo un lavoro più del previsto, abortisco e faccio l'unione al contrario.

Oh, e per quanto riguarda la perdita di cose: non perderete mai qualcosa in un modo o nell'altro tranne che rimuovete voi stessi. Git non getterà via le modifiche tranne che lo dirai a (rimuovere cose durante un'unione, usando una strategia di fusione non predefinita, ecc.).

Problemi correlati