git: actualización de la twig de vendedor

Tengo un repository git con twigs master y dev . También hay un proveedor de sucursal vender que utilizo para actualizar las bibliotecas de terceros.

Ahora he estado en el proyecto por un time y he cometido una buena cantidad de cambios y también he actualizado el código de terceros un par de veces. (Nunca agrego mis propios cambios a libs de terceros, simplemente los actualizo desde la fuente)

Lo que solía hacer es: (quizás erróneamente)

 (dev) $ git checkout vender (vender) $ git merge dev (vender) $ ... update third party libraries ... (vender) $ git commit -am '...' (vender) $ git checkout dev (dev) $ git merge vender 

De esta forma, primero fusiono el desarrollador completo en vender y luego, después de actualizar el vender , lo vuelvo a fusionar en dev . Lo que esto hizo fue traer todo el historial a la twig de vender que NO está relacionado con la actualización de las bibliotecas de terceros. Quería tener el logging en mi sucursal de vender para include SOLO las confirmaciones sobre la actualización de libs de terceros.

Creo que estaba equivocado al fusionar dev en vender (asumí que todo el código debe estar en cada twig, ya que soy un novato git).

Mi primera pregunta es:

¿está bien NO fusionar dev en vender y seguir actualizándolo (supongo que al hacerlo se mostrará el logging de vender contiene solo las confirmaciones de actualización de terceros)

AHORA, en este punto, tengo una twig de vender muy sucia, contiene TODAS las confirmaciones que hice en dev , que no tienen nada que ver con el código de un tercero. ¿Qué debo hacer ahora para que la twig de vender muestre correctamente solo las confirmaciones relacionadas con la actualización de terceros?

Sí, no debes unir dev a vender ya que eso no es necesario.

  1. git stash cualquier cambio no guardado que pueda tener, por las dudas.
  2. git reflog para ver un logging de todos los cambios que ha realizado, incluido el cambio de twigs y tal. Este logging muestra todas las cosas que ha hecho, retrocediendo en el time, y es la herramienta principal para solucionar esto.
  3. Encuentre el punto en el logging donde ejecutó git merge dev , luego obtenga el SHA de la línea debajo de ese (anterior), que probablemente dirá checkout: moving from dev to vendor .
  4. Con el vendor desprotegido, ejecute git reset --hard <SHA> que pondrá al vendor nuevamente donde estaba antes de que todo esto ocurriera.
  5. Encuentre la línea de logging / SHA para cada confirmación que realizó para actualizar bibliotecas de terceros, y ejecute git cherry-pick <SHA> para volver a aplicar esa confirmación sobre el vender .
  6. En este punto, el vender está todo arreglado, pero aún tenemos que volver y reparar el dev .
  7. git checkout dev
  8. Encuentra el punto en el logging donde tuviste comprobado dev, que probablemente sea el que estaba antes del SHA que encontraste en el paso 3.
  9. Ejecute git reset --hard <SHA> en eso para devolver dev al lugar donde estaba originalmente antes de todo esto.
  10. git merge vender para combinar el vender en dev correctamente.

En este punto, también podría ser una buena idea usar GitX o gitk para asegurarse de que su historial sea razonable. Y haga copys de security antes de hacer esto por si acaso 🙂

Alternativamente para los pasos 3. y 9. , puede ejecutar git reset --hard origin/vender y git reset --hard origin/dev si aún no ha vuelto a git reset --hard origin/dev al server ninguno de estos cambios, suponiendo que tiene un server.

Hiciste una fusión y no una rebase, ¿correcto? Para limpiar la twig de vendedor, deberías poder hacer un git reset <commit> . Si está entremezclada (lo cual suena como si fuera), entonces será un dolor de cabeza.

¿Tiene alguna forma de distinguir los commits de la twig vendedor de los dev commits? Si es así, podrías probar una rebase interactiva para descartar los commits malos. Algo como git rebase -i <commit> te ayudaría a empezar.