Sto lavorando a un progetto Rails su larga scala e il team con cui lavoro sta utilizzando Github per gestire il progetto. Mentre molte modifiche vengono elaborate localmente e quindi inviate direttamente al nostro ramo di sviluppo, creiamo un ramo quando lavoreremo a una modifica molto ampia. Quando arriva il momento di unire nuovamente questo ramo allo sviluppo, spesso cerco di rebase lo sviluppo nel mio branch di funzionalità prima di fondere il mio branch di funzionalità in sviluppo (per evitare di sovrascrivere il lavoro di altre persone). Trovo che quando faccio questo, mi sembra di incontrare gli stessi conflitti di fusione due volte. Eseguo un'intera lista di conflitti durante la ridefinizione, quindi eseguo nuovamente la stessa lista di conflitti durante l'unione. Devo rebase sviluppare nel mio branch funzionalità prima di fondere la mia funzionalità in sviluppo, o dovrei semplicemente fondere la mia funzionalità in sviluppo?Quando utilizzo Git, devo eseguire il rebase prima di unire?
Diciamo che il mio ramo di funzionalità è chiamato "nuova_funzione". Il mio processo per la fusione con il ramo "sviluppare", va in questo modo:
git checkout develop
git pull (this is set up on our rig to always pull rebase)
git checkout new_feature
git rebase develop
(lots of merge conflicts ensue)
git checkout develop
git merge -no-ff new_feature
(same set of merge conflicts again)
E 'come se la timeline cambia dal mio rebase causare la mia nuova filiale funzione per specie di specchio sviluppare tutta la strada, e quindi sviluppare conflitti con una psudo-copia di se stesso.
perché 'git merge -no-ff'? Se hai appena ridefinito new_feature in sviluppo, _should_ essere un avanzamento rapido. – Useless
Onestamente non sono sicuro. Per un po ', abbiamo avuto un ragazzo qui che conosceva davvero Git, e mi ha detto che avrei dovuto farlo in quel modo per qualche motivo che aveva a che fare con la pulizia della timeline. Non so davvero quale fosse la ragione. –
Posso vedere che potrebbe rendere la timeline confusa ... hmm. Il rebase sta sostituendo tutti i commit su 'new_feature' con modifiche equivalenti applicate a' develop' invece che al punto di diramazione originale, il che significa che otterrete (copie di) vecchi commit, i cui genitori (tra il punto di diramazione originale e 'sviluppano/HEAD') sono più vecchi di loro. – Useless