Mi escenario es que tengo una rama en la que hice grandes mejoras en el proceso de compilación (rama A) y en otra estoy trabajando en una característica no relacionada (rama B). Entonces, ahora, cuando estoy pirateando en la rama B, quiero incorporar lo que escribí en la rama A porque quiero compilaciones más rápidas y fáciles. Sin embargo, no quiero "contaminar" mi rama B, simplemente agregue cambios de branchA a cambios sin etapas.
Lo que he intentado (cuando estoy parado en la rama B):
git merge --no-commit branchA
No funciona porque te coloca dentro de una fusión. Si no fuera así, sería perfecto.
git checkout branchA -- .
No funciona porque aplica cambios entre branchA..branchB y no los cambios master..branchA.
¿Algo más?
Editar: Sí, los cambios en la rama A están comprometidos. En este ejemplo, solo hay una rama con mejoras de compilación, pero puede haber hasta N ramas con mejoras de compilación que quiero aplicar mientras trabajo en una rama de funciones.
Respuestas:
Solo tenía que hacer algo similar y pude solucionarlo agregando
--squash
al comando de combinaciónfuente
git commit —amend
y agregará los nuevos cambios a la última confirmación, pero no estoy del todo seguro de si funciona en las confirmaciones de fusióncherry-pick -n
debería hacer lo que quiera, pero no estoy seguro de por qué quiere las mejoras de compilación como cambios sin etapas, eso solo hace que varias cosas sean más difíciles (por ejemplo, fusionar otros cambios en los archivos modificados o volver a colocar cualquier cosa).En ese caso, crearía una nueva rama, C, que fusiona tanto de A como de B (y cualquier otra rama con mejoras de compilación). Confirme los cambios en la rama de funciones, B, luego combínelos con la rama C, que ahora contiene las mejoras de compilación y los cambios de la rama de funciones, para que puedan probarlos juntos. Si necesita hacer más cambios, hágalo en la rama apropiada, no en C, luego fusione a C. Así que nunca cambie nada en la rama C, solo úsela para integrar cambios de otras ramas.
Eso significa que puede usar todas las características de Git en la rama C, en lugar de hacer malabarismos con los cambios no confirmados en un árbol sucio.
fuente
cherry-pick -n
: Creé una copia de trabajo de mi código agregando muchas cosas en lugares aleatorios. Ahora quiero limpiar mi código antes de comprometerme con la rama de esta función. Entonces cambio a una rama temporal, confirmo todos los cambios. Regrese a la rama de características,cherry-pick
que se compromete. ¿Existe una forma mejor de hacer esto?Debería poder seleccionar las confirmaciones (con
-n
para evitar comprometerse de inmediato).fuente
No estoy 100% seguro de haberlo entendido claramente, pero en mi caso acabo de crear un parche de diferencia entre las ramas y luego apliqué esta ruta en la rama B.
Dentro de la rama A:
fuente
No estoy seguro de entender sus requisitos.
Puede ejecutar una combinación y luego llamar
git reset HEAD~1
.La siguiente secuencia debería reproducir cada confirmación entre
master
ybranchA
encima debranchB
. SebranchB
omitirán las confirmaciones que ya se hayan aplicado .fuente
--soft
opción si no desea los cambios en el área preparada . ¿Podrías dibujar un gráfico de cómo están configuradas tus ramas?