¿Cómo puedo sin dolor combinación divergentes en función de las ramas?

0

Pregunta

Me han abierto un PR en una rama llamada feature-b que pronto se unieron para main. Sin embargo, la escribí para apoyar a mi feature-a rama, la cual está en curso. Quiero seguir trabajando en feature-a y aprovechar el trabajo que hice en el feature-b antes se ha unido a main.

¿Cuál es la mejor manera para mí para hacer esto? Nuestro combina a main son aplastadas, de modo que todos se compromete en feature-b será reescrito como un único commit cuando se fusionaron para main. Por lo tanto, de reajuste feature-a en feature-b ahora va a resultar en un conflicto futuro dolor cuando me combinación feature-a a main debido a que los mismos cambios que se han hecho en diferentes comete.

¿Cuál es la mejor manera para mí para incluir los cambios realizados en feature-b en mi feature-a rama minimizando al mismo tiempo el futuro dolor cuando finalmente me combinación feature-a a main?

ACTUALIZACIÓN

Me fui por delante y:

  1. Rebasada feature-a en feature-b
  2. Hecho más cambios (sólo 1 commit) a feature-a mientras feature-b se está revisando
  3. Squash-combinado feature-b una vez que fue aprobado (no más cambios de los necesarios, por lo feature-a ya tiene el código exacto que fue fusionada)
  4. Tiró de última main y reajustado feature-a en la parte superior de la misma

Como se temía, git se queja de que hay varios archivos "ambos modificados" o "ambos añadido". Esto por sí solo sería un poco molesto, pero sencillo de solucionar. Lo que hace que sea increíblemente confuso, especialmente si cualquier paso de tiempo ha pasado - es la combinación de los comentarios en los archivos.

A pesar de que ambos main y feature-a las ramas tienen exactamente el mismo código en todos los archivos, me sale super molesto comportamiento:

  1. Para el "añadido tanto en" archivos de mezcla se agregan comentarios para "la CABEZA" (Cambio Actual)" y "padre de #HASH (mensaje de commit)". Estoy obligado a elegir entre uno u otro, aunque no son exactamente lo mismo!
  2. Para la "ambos modificados" los archivos, es aún peor. La "CABEZA (Cambio Actual)", se muestra el código correcto. Sin embargo, el "padre de #HASH (mensaje de commit)" sección de espectáculos de la mitad del código. De nuevo, aunque ambas ramas tienen todo el código!! No estoy bromeando, aceptando el "cambio entrantes" (en la etiqueta de VS Código) va a quitar el código que está en ambas ramas!

Si yo no hubiera hecho estos cambios en rápida sucesión, yo estaría irremediablemente perdido y confundido acerca de lo que git me está mostrando. Que de hecho ha ocurrido varias veces en el pasado, pero no podía poner un dedo en lo que iba mal. Ahora que he reproducido este y verificar el comportamiento, estoy completamente desconcertado en cuanto a lo de git está haciendo y cómo las personas se enfrentan con esta situación.

ACTUALIZACIÓN 2

OK, yo veo por qué iba a quitar el código de ahora. Es debido a que los cambios que he hecho en feature-b estaban en múltiples revisiones, y los compromete terminó siendo aplastado cuando la mezcla para main se ha producido. Esta es sin duda la fuente del dolor y por eso estoy tratando de averiguar un flujo de trabajo más sana.

git
2021-11-23 23:26:24
1

Mejor respuesta

0

No estoy convencido de que el final de mezcla/squash será complicado. Si el mismo cambio que se están realizando en diferentes comete, tal vez Git puede detectar eso y ser feliz con él.

Si cree que será complicado, aunque, lo que puedes hacer es:

  1. Reajuste de su feature-a rama con feature-b ahora, por lo que su feature-a rama ahora incluye la función de B y el progreso de Una característica, que es lo que usted necesita para realizar su trabajo.
  2. Después de feature-b en la que se combina la main rama, reajuste de la feature-a en la confirmación inmediatamente antes de la aplastado cometer que hicieron de la característica B. Esto debería ir sin problemas.
  3. En su feature-a rama git reset --soft X donde X es la confirmación de hash para el aplastado cometer hicieron de la característica B. a Continuación, utilice git commit para hacer un commit. Ahora usted tiene una aplastado cometer cuyo contenido es igual a la corriente del estado de su trabajo en función de A. Pero esta cometer principal es la confirmación de que la característica añadida de la B a la rama principal, por lo que este cometer diff con que el padre sólo contienen A. está bien para continuar trabajando en función de a en este momento, o simplemente solicitar una fusión.

Por cierto, estoy bastante seguro de que las cosas no sería necesario este sucio si su organización utiliza funde en lugar de amalgamas para añadir cosas a la rama principal. Y entonces no sería el beneficio de la preservación de la verdadera historia de el código que estaba trabajando, en vez de sólo la preservación artificial de la historia.

2021-11-23 23:52:54

Para ser claros, no usamos amalgamas - utilizamos aplastado comete. Y estoy 99% seguro de que las cosas va a estar complicado como he intentado esto en el pasado. Git se pone terriblemente confundido por los distintos compromete a hacer los mismos cambios. Yo estoy dispuesto a intentarlo de nuevo, y aunque el informe de nuevo :)
me--

@me-estoy bastante seguro de aplastado comete es un rebase
evolutionxbox

Reajuste significa mover la rama con lo que se inicia un punto diferente, que reescribe la historia de cómo se ha desarrollado. Aplastar significa cambiar toda la rama en sólo un commit, descartando la historia de cómo se desarrolló excepto para el resultado final.
David Grayson

@DavidGrayson por Favor vea mis actualizado pregunta para obtener una explicación del comportamiento de git.
me--

OK. Su paso 4 ("Tirado últimas principal y reajustado característica-una en la parte superior de la misma") es lo que causó que todo el dolor así que no es algo que yo recomendaría hacer. En lugar de hacer que el paso 4 en su pregunta, intente los pasos 2 y 3 de mi respuesta.
David Grayson

Gracias @DavidGrayson. Parece que lo . . . laborioso
me--

Como he dicho en mi respuesta, pero el problema es causado por la persona que hace todo esto de la lectura y aplastar en lugar de sólo la fusión.
David Grayson

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................