Git Patches y nueva sucursal

Tengo un montón de files en los que he hecho cambios en mi sucursal local todo en uno llamada "testing". Quiero seleccionar files específicos y luego moverlos a una nueva twig y enviarlos de forma remota a esa nueva twig. Mi jefe me aconsejó que ejecutara git commit -p y luego revisara lo que quería conservar y, de alguna manera, lo añadiera a una nueva twig y lo inserta. Estoy luchando para descubrir cómo hacer esto. ¿Alguien podría ayudar?

¡gracias!

El enfoque recomendado de su jefe solo tiene sentido si tiene una combinación de cambios para la nueva twig y cambios para la twig anterior (o para descartar, o lo que sea) en los mismos files .

Suponiendo que ese es el caso:

  1. crea y cambia a la nueva twig sin cambiar tu copy de trabajo:

    git checkout -b mynewbranch 

    pero no elimine nada, eso sería potencialmente con pérdidas en esta etapa

  2. agregue cualquier file nuevo (sin seguimiento) que debería existir solo en la nueva twig por ahora

     git add <filenames> 
  3. agregue los cambios que deberían ir en la nueva twig

     git add --patch 

    o

     git add --interactive 

    Siempre encuentro interactivo requiere un poco de práctica para ser honesto, no es la interfaz más amigable.

  4. comprometer el índice con su nueva sucursal; puede revisarlo primero para confirmar que tiene sentido

     git status git diff --cached git commit 

    tenga en count que cualquier cambio que elija no agregar a esta twig, solo existirá en su copy de trabajo

  5. vuelva a su sucursal anterior, llevando consigo los cambios de copy de trabajo sin compromiso y sin compromiso

     git checkout master 

Primero cambie a una nueva sucursal:

 git checkout -b mynewbranch 

A continuación, elimine todos los files que no desea tener en esa twig. Una vez que haya hecho esto, ejecute:

 git add -u git commit 

Y finalmente empuja tu nueva twig a tu control remoto:

 git push origin mynewbranch 

Hay varias forms de lograr esto, cada una con ventajas y desventajas.

Acercamiento directo

Como se describió anteriormente: cambiar a otra twig, eliminar files no necesarios, confirmar los files que necesita.

 git checkout -b mynewbranch git add -u git commit git push origin mynewbranch 

Rápido y sucio, pero perderá toda la historia, si estos files ya han sido cambiados.

Movimiento Ninja

Puede stash los cambios de una twig y aplicarlos en otra twig.

 git shash # Will put your changes into `hidden pocket` git checkout -b mynewbranch git stash pop # Your changes will pop out from `hidden pocket` git commit git push origin mynewbranch 

Resbaladizo y preciso, pero igual perderás el historial de estos files, si corresponde.

Enfoque de package

Puede transferir confirmaciones de una twig a otra.

 git bundle file.name revision..list # Packing revisions to file git checkout -b mynewbranch git bundle unbundle file.name # Unpacking revision in new branch 

Slick, conserva su historial, pero guarde solo si durante las revisiones seleccionadas no se tocaron otros files.

Vieja escuela

Use parches!

 git format-patch revision..list # generate patch files for each revision in the list git checkout -b mynewbranch cat filename.patch | git am # Applying patch to the current branch 

Puede ser complejo descubrir qué parche necesita aplicar y cuál no. Pero puedes tomar el control total del process.

Si ninguna de las descripciones se ajusta a sus necesidades al 100%, puede combinar enfoques para lograr lo que necesita.

Has probado:

  • Sin comprometer los cambios aún
  • Verificando en una nueva sucursal (-b crea una nueva sucursal)
     git checkout -b new_branch 
  • Cometer los cambios en la nueva twig
     git commit -a -m "made some changes and stuff" 
  • Hacer el parche
     git format-patch master --stdout > made_some_changes.patch 

    Esta última línea crea un nuevo file de parche y registra todos los cambios en el nuevo file.

Cuando crea una nueva bifurcación y con los files sin seguimiento y los cambios presentes, la bifurcación original vuelve a su último compromiso y todos los cambios sin seguimiento son visibles solo en la nueva bifurcación y no en la anterior.

Para suavidad: nombrar el file de parche ../made_some_changes.patch creará el file fuera de su repository. Entonces el command sería

 git format-patch master --stdout > ../made_some_changes.patch