Estoy trabajando en un proyecto de Rails a gran escala, y el equipo con el que estoy trabajando usa Github para administrar el proyecto. Si bien muchos cambios se trabajan localmente y luego se envían directamente a nuestra sucursal de desarrollo, creamos una rama cuando vamos a trabajar en un cambio muy grande. Cuando llegue el momento de fusionar esa rama nuevamente en desarrollo, a menudo trato de volver a desarrollar la base de mi rama de características antes de fusionar mi rama de características en desarrollo (para evitar sobrescribir el trabajo de otras personas). Encuentro que cuando hago esto, parece que me encuentro con los mismos conflictos de fusión dos veces. Me encuentro con una lista completa de conflictos mientras cambio de base, luego vuelvo a encontrar la misma lista de conflictos durante la fusión. ¿Debería volver a desarrollar la base de datos en mi rama de características antes de fusionar mi función en desarrollo, o debería fusionar mi función en el desarrollo?Cuando estoy usando Git, ¿debo volver a establecer la base de datos antes de fusionarme?
Digamos que mi rama de características se llama "new_feature". Mi proceso de fusión con la rama de "desarrollo" es la siguiente:
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)
Es como si la línea de tiempo cambia de mi rebase porque mi nueva rama de la característica de especie de espejo desarrollar todo el camino de vuelta, y luego desarrollar conflictos con una copia de sí mismo.
¿por qué 'git merge -no-ff'? Si acaba de actualizar new_feature para desarrollar, debería ser un avance rápido. – Useless
Honestamente, no estoy seguro. Por un tiempo, tuvimos un tipo aquí que realmente conocía a Git, y él me dijo que debería hacerlo de esa manera por alguna razón que tuviera que ver con limpiar la línea de tiempo. Realmente no sé cuál fue el motivo. –
Veo que puede hacer que la línea de tiempo sea confusa ... mmm. La rebase reemplaza todos los commits en 'new_feature' con cambios equivalentes aplicados a' develop' en lugar del punto de bifurcación original, lo que significa que obtendrá (copias de) commits antiguos, cuyos padres (entre el punto de bifurcación original y 'develop/HEAD') son más viejos que ellos. – Useless