He estado usando Git durante aproximadamente un año y creo que es fantástico, pero acabo de comenzar con una segunda versión del proyecto y comencé una nueva rama para él. Estoy luchando un poco con la mejor manera de manejar las cosas en el futuro.
Tengo dos ramas llamadas say master10 (para v1) y master20 (para v2). He estado haciendo correcciones de errores en v1 en la rama master10, y desarrollando nuevas cosas de master20. Cada vez que soluciono un error, lo combino en la v2 revisando master20 y haciendo git merge master10
. Hasta aquí todo bien.
Ahora, sin embargo, he realizado un cambio en v1 que no quiero en v2, pero quiero continuar fusionando otras correcciones de errores. ¿Cómo le digo a Git que omita ese commit en particular (o un rango de commits), pero que en el futuro todavía quiero fusionar otras correcciones de errores?
Pensé que git rebase
podría ser lo que necesitaba, pero leí el documento y mi cabeza casi explotó.
Creo que lo que quiero es algo así como un comando "git sync" que le dice a git que dos ramas ahora están sincronizadas y en el futuro solo fusionan los commits desde este punto de sincronización en adelante.
Cualquier ayuda apreciada.
fuente
En mi humilde opinión, lo más lógico es fusionar todo y luego usar git revert (commit_you_dont_want) para eliminarlo .
Ejemplo:
Si tiene varias confirmaciones de "ignorar" o desea editar el mensaje de reversión:
Entonces su historial puede verse así:
Si tiene conflictos que involucran SOLO estas confirmaciones de "ignorar", puede usar:
Entonces su versión persistirá sobre la otra. Incluso sin mensajes de error, aún puede "revertir" esas confirmaciones no deseadas, ya que pueden tener otros cambios que no entraron en conflicto, y todavía no los quiere.
Si tiene conflictos que involucran NO SOLO las confirmaciones de "ignorar", debe resolverlas manualmente, y probablemente tendrá que resolverlas nuevamente durante la reversión.
fuente
Los commits incluyen ascendencia. No puede fusionar una confirmación sin fusionar confirmaciones anteriores.
Puedes elegirlos, por supuesto. Eso es un buen flujo cuando tienes una rama que está en modo de mantenimiento.
fuente
Suena como un caso clásico para 'git cherry-pick' https://git-scm.com/docs/git-cherry-pick hace exactamente lo que parece
fuente
Una especie de anuncio para mi proyecto que básicamente envuelve el proceso descrito por @araqnid.
Es una especie de ayuda que introduce el siguiente flujo de GIT:
Una cita de la página del proyecto:
fuente
Cree una tercera rama para los cambios que desea en master10 pero no en master20. Siempre considere master10 como su "maestro", la rama más estable de todas. La rama con la que todas las demás ramas quieren estar sincronizadas en todo momento.
fuente
En lugar de
revert
ocherry-pick
para este caso, necesita que git considere que los cambios que omite son más antiguos que los que realizó.Entonces:
git merge ccc
git merge fff --no-commit
git merge --continue
git merge source-branch-head
Después del Paso 4, git considerará su rama más reciente que esa confirmación, ya que ya la trató (al elegir mantener SUS versiones de las cosas).
fuente