tag pick multiple from example commits cherry another git merge git-cherry-pick

multiple - Cómo git cherrypick todos los cambios introducidos en una rama específica



git cherry pick multiple commits (4)

Información de fondo:

Debido a las restricciones en el flujo de trabajo sin los sistemas existentes, debemos configurar un proceso de git algo poco ortodoxo.

(patch) A-B---F | | (hotfix) C-D-E | (dev) 1-2-3-G

En la rama del parche, hay algunas confirmaciones. Los archivos aquí son similares pero no idénticos a los de dev (los scripts de sincronización cambian en función del orden de configuración de muchos de los archivos, lo que hace que aparezcan cambiados mientras son funcionalmente iguales).

Se necesita una solución en esta rama para que se cree y se trabaje en una rama de revisión. Esta rama se fusiona de nuevo en el parche, hasta ahora, todo bien.

Esta misma solución debe implementarse en la rama dev para que se mantenga relativamente sincronizada con el parche, pero al tratar de combinar la rama de hotfix, git intenta combinar todos los archivos no relacionados y "no modificados" de A y B, en lugar de solo C, D y E.

Pregunta:

Parece que cherry-pick hace lo que queremos en términos de solo obtener cambios de las confirmaciones seleccionadas, pero realmente me gustaría una manera de seleccionar todas las confirmaciones en una rama determinada a la vez, sin tener que buscar las ID de confirmación cada vez .


Parece que cherry-pick hace lo que queremos en términos de solo obtener cambios de las confirmaciones seleccionadas, pero realmente me gustaría una manera de seleccionar todas las confirmaciones en una rama determinada a la vez, sin tener que buscar las ID de confirmación cada vez .

Utilizando cherry-pick

git cherry-pick te permite elegir cualquier compromiso que hayas hecho en cualquier rama a cualquier otra rama. En su caso, simplemente puede cherry-pick la rama maestra y luego cherry-pick todas las confirmaciones de cualquier rama que desee ( cherry-pick admite rangos para que pueda especificar la confirmación de inicio y finalización en lugar de enumerar todas las confirmaciones).

De esta manera puede controlar la forma en que aparecerán sus confirmaciones en la rama deseada.

Por ejemplo:

git cherry-pick ebe6942..905e279

# Find the range of commits you wish to re-add to your branch. # then use cherry-pick to add them back to the branch git cherry-pick start..end # If you wish to include the start commit as well add the ^ # This will result in a cherry-pick of the start commit included as well git cherry-pick start^..end

¿Cómo encontrar el primer commit de rama?

git log

# print out the latest commit (first one) of the given branch git log --oneline | tail -1

merge-base

Use el comando merge-base para encontrar dónde se dividió la rama de la rama original:

git merge-base A B


Esto también debería funcionar. Llamamos al punto de divergencia entre el HEAD (maestro en este caso) y la rama y lo pasamos a cherry-pick.

git merge-base origin/dev_single_doc_fit HEAD | xargs git cherry-pick {}..HEAD^


Si desea seleccionar todos los compromisos de la rama dev.

Tratar:

git cherry-pick ..dev


revisa tu rama (rama objetivo) y haz

git cherry-pick -m 1 hashCode