Cómo cherry-pick y combinar sólo una subruta de una rama de la característica para el maestro

0

Pregunta

Tengo un problema interesante (al menos para mí).

Tengo un master rama y un feature rama, que ha sido separada de su manera de master hace un rato. Otro equipo mantiene la actualización de la master rama y mi equipo es trabajar sólo en feature la rama.

El master rama incluye algunos cambios que mi equipo no está interesado en. Nosotros sólo nos preocupamos de su app carpeta, eso es todo. Incluso en el app carpeta, no estamos interesados en todo, no sólo a los cambios que creemos que necesitamos. No somos la fusión de nuestra feature la rama en su master porque no hay tecnología de la pila de los cambios que se están implementando y lo único que se necesita de ellos es el código de JavaScript.

Mientras tanto, también estamos haciendo cambios en la feature de la rama de app carpeta. Así que en el app carpeta, tienen algunos cambios que no tenemos, tenemos algunos de los cambios que ellos no tienen. Queremos mantener a todos nuestros cambios, pero sólo recoger algunas de sus cambios.

Cómo se puede ir sobre la fusión de sus master de la rama de app carpeta en nuestro feature de la rama de app carpeta? He estado investigando por horas, probé algunas VS extensiones de Código vista previa de la diferencia entre las dos carpetas. Lo que estoy buscando es una interfaz donde puedo Aceptar o Rechazar todo lo que viene de master de la rama de `la carpeta de la aplicación. Aunque esta es mi preferencia, estoy abierto a cualquier sugerencia que podría resolver este problema.

Esto puede sonar como un mal estado de la situación, pero mi equipo perdió a algunos miembros en el último par de meses y la diferencia entre las ramas creció más grande y más grande cada semana. Ahora queremos resolver esto de una vez por todas.

Gracias por tu ayuda.

cherry-pick git merge
2021-11-24 00:41:33
2
1

Lo que estoy buscando es una interfaz donde puedo Aceptar o Rechazar todo lo que viene de la rama principal de la app carpeta

git checkout -p master app es crudo, pero se encuentra a una buena probabilidad de que sirven aquí.

Si eso no es muestra suficiente para decidir lo que quieres, el siguiente paso es un selectivo de mezcla con

git diff --merge-base @ master -- app | git apply -3

que va a utilizar Git automerge maquinaria y salir de cualquier contiguos o que se superponen los cambios para que usted clasifique como de costumbre, o puede guardar los cambios a un archivo y editarlo a gusto antes de aplicarlo si tienes cuidado.

2021-11-24 06:42:34
1

Hay dos maneras de hacer esto. El más simple voluntad de mantener los cambios, pero deseche cualquier cometa que hicieron. El más complejo de preservar comete.

Recomendación

Tanto de los dos métodos descritos a continuación tienen el potencial de causar conflictos y otros dolores de cabeza hacia abajo de la línea, especialmente como las personas a realizar cambios en la rama master. Además, si usted tiene cambios en la aplicación/ carpeta en la rama de característica, directamente a través de git apply puede resultar en que los cambios que se sobrescriban.

Recomiendo la fusión de la rama principal en la rama de la funcionalidad a través de git merge con ninguna de aplastamiento. Dada la divergencia que usted ha mencionado, puede haber conflictos, pero esto está bien. Conflictos de hacer lo que quiera: que permiten elegir qué cambios a aceptar y cuáles rechazar.

Dicho esto, aquí hay dos enfoques que son análogos a cherry-picking sólo una única carpeta.

Opción 1: Descartes comete, mantener los cambios

Este método es bastante sencillo, y se utiliza una combinación de git diff y git apply:

git switch feature
git diff feature..master -- app | git apply --index

Esto hará que:

  • Cambiar a la rama de característica (aquí es donde vas a aplicar los cambios)
  • Obtener todos los cambios realizados en la rama master, que no están en la rama de la característica.
  • Filtrar únicamente los cambios en la app directorio
  • Aplicar los cambios a través de git apply
  • La etapa de los cambios mediante la adición al índice (esto es lo que el --index opción)

La única desventaja de este enfoque es que no va a preservar la historia, o los mensajes de confirmación.

Desde allí, usted puede confirmar los cambios usted mismo:

git commit -m "Apply changes made to master branch"

Opción 2: Obtener tanto se compromete y cambios

Este es un poco más complicado, y depende de git format-patch.

git switch feature
git format-patch --stdout feature..master -- app | git am

Esto hará que:

  • Cambiar a la rama de característica (donde vamos a aplicar los cambios)
  • Obtener todos los cambios realizados en la rama master, que no están en la rama de característica
  • Filtrar sólo los cambios realizados en el app directorio
  • El formato de estas como una serie de parches (que contiene los mensajes de confirmación, autores, etc)
  • Aplicar todos estos parches usando git am

Tenga en cuenta que dependiendo del contenido de los cambios, esto puede resultar en un fracaso que tendrá que resolver de forma manual. (Se le avise a este)

2021-11-24 21:55:27

En otros idiomas

Esta página está en otros idiomas

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