git - mac - ¿Cuál es la mejor manera de poner parche en un subrango de una rama?
git repository (3)
Hasta donde yo sé, no se puede fusionar de esta manera. Merge está destinado a unir dos ramas que tienen un historial en común, no para recoger varias confirmaciones o series de parches. Siento que elegir es lo que estás pidiendo.
Puedes usar git cherry (no elegir con la punta de la guinda ) para descubrir qué commits se deben insertar en tu rama, luego git cherry-pick them. También puede pedir explícitamente a git cherry-pick que registre el origen de esas confirmaciones en caso de que esté eligiendo cuidadosamente una sucursal pública. Esta es probablemente la mejor manera de lidiar con este problema. (Otro podría haber sido exportarlos a través del parche de formato git y luego importarlos con git-am / git-apply, pero eso probablemente sería más lento, además no registrará el origen de los commits).
EDITAR: "Público" (rama) debe entenderse como algo no sujeto a la edición histórica. Por supuesto, puede hacerlo al desarrollar software de código cerrado sin que el código sea público.
En Subversion, es fácil fusionar un rango de conjuntos de cambios / diffs de una rama usando "svn merge -ra: b mybranch". Pero en git, encontré que solo es posible seleccionar una confirmación de una sucursal para aplicar ese parche a mi rama de trabajo actual. Entonces, me pregunto si existe una manera rápida de aplicar todas las confirmaciones de una sola vez entre dos etiquetas en una rama de corrección de errores a mi rama maestra actual.
La forma más fácil de realizar la acción que estás buscando es con git rebase
. Aquí hay una receta. Supongamos que la etiqueta A es la confirmación, sobre la cual se basa la serie de parches que desea seleccionar y esa etiqueta B es la confirmación del parche final de la serie. Además, supongamos que br es el nombre de la rama actual y la rama donde se aplicará la nueva serie de parches.
# Checkout a new temporary branch at the current location
git checkout -b tmp
# Move the br branch to the head of the new patchset
git branch -f br B
# Rebase the patchset onto tmp, the old location of br
git rebase --onto tmp A br
La forma más fácil que he encontrado para hacer esto es:
git cherry-pick starthash..endhash
tenga en cuenta que los dos puntos no tienen espacios que los separe de las etiquetas hash.