Cómo gestionar un mayor desarrollo en una queueboración de Github después de una request de extracción pero antes de la fusión ascendente

Aunque utilizo Git para administrar mis propios proyectos, soy nuevo en la queueboración en Github y estoy un poco confundido sobre cómo administrar mi trabajo.

Esto es lo que hice y dónde estoy:

  • En Github hizo un tenedor de un repository
  • Clonado en mi PC de escritorio
  • Se agregó el git remote add upstream http_url.git ascendente al repository original con: git remote add upstream http_url.git
  • Creé una nueva twig, hice mis cambios, los comprometí
  • Empujé mi twig con: git push origin my_branch
  • En Github, en mi tenedor, cambié a la twig que acaba de ser empujada y creé una request de extracción

Todo bien y bien El propietario del repository original me agradeció la request de extracción y me dijo que no está y que no podría verificar ni fusionar hasta la semana que viene.

Seguí la práctica sensata e hice cambios a solo un aspecto del código. Sin embargo, hay un par de cosas más que me gustaría hacer y emitir requestes de extracción, pero estoy confundido sobre la mejor manera de gestionarlo con git.

Normalmente, ser feliz con la sucursal, lo fusionaría con el maestro y seguiría. Pero no estoy seguro de si eso es lo que debería hacer. ¿Debo, en cambio, crear una nueva twig fuera de la twig que ya empujé y desarrollé allí? No estoy exactamente seguro de lo que sucederá cuando fetch upstream después de que mi request de extracción sea aceptada y fusionada en el repository original.

¿Cómo debo gestionar un mayor desarrollo? Tenga en count que el trabajo de desarrollo que deseo hacer requiere los cambios que ya hice y que el propietario del repository original dio el visto bueno a los cambios que estoy realizando antes de comenzar y, dado que están bien escritos y funcionan , Tengo la expectativa de que mi request de extracción será aceptada y fusionada cuando regrese. Además, no quiero esperar hasta el final de la próxima semana para continuar con mi desarrollo.

Gracias.

Digamos que la twig que ha pulsado y creado la request de extracción es A y ha realizado n compromisos. Entonces con respecto al maestro se ve así:

 commit a1 commit a2 ... ... ... ... commit an 

Si inserta más confirmaciones en esta twig, la request de extracción se actualizará automáticamente. Por lo tanto, si desea fusionar los nuevos cambios con esta request de extracción, no hay nada que hacer excepto presionar aquí los nuevos commits.

Ahora, digamos que no desea agregar otras cosas en esta request de extracción y los nuevos cambios requieren cambios realizados en esta twig (es decir, confirma a1 a2 ... an ). Aquí puede crear una nueva twig B desde A y hacer nuevas confirmaciones b1 b2 ... bn aquí. Entonces, con respecto a A twig B ve así:

 Branch B with respect to A commit b1 commit b2 ... ... commit bn 

Pero con respecto a la twig master B se ve así:

 Branch B with respect to master commit a1 commit a2 ... commit an commit b1 commit b2 ... commit bn 

Tenga en count que a1 a2 ... an están allí desde que B se creó desde A y A no se fusionó con el master todavía.

Ahora A se fusiona con master en github por el propietario del repository principal. Si va a search en upstream después de que cometa a1 a2 ... an habrá un presente en el upstream/master pero no en el master local. Para get luego en su maestro local, debe fusionar eso en su sucursal local.

 $ git checkout master $ git fetch upstream $ git merge upstream/master 

Después de fusionar upstream/master con upstream/master local, es decir, después de que a1 a2 ... an vez disponible en master commits a1 a2 ... an a se eliminará automáticamente de B

 Branch B with respect to master after upstream/master is merged to master commit b1 commit b2 ... commit bn 

Ahora la request de extracción de B contendrá solo estos cambios y estarán listos para fusionarse.

Sin embargo, hay una trampa en esto. Si realizó más cambios en A después de que creó B partir de él, es decir, los nuevos commits an+1 an+2 ... an+m son empujados a A antes de que se fusionen, entonces necesitará estos commits en B también. Si ese es el caso, entonces puedes hacer git rebase y rebase B interactiva en A (o en master después de que A se haya fusionado). Familiarícese con rebase ya que es la herramienta más poderosa para hacer este tipo de trabajo.

Advertencia : ten cuidado con rebase . Es fácil complicar las cosas con esto si se usa de manera incorrecta. Es mejor experimentar con algunas twigs de testing antes de probarlo en una twig de trabajo real.

Estoy usando la feature para ser el nombre de la twig en lugar de my_branch . " http_url.git ascendente" significa el repository representado por http_url.git .

Normalmente, ser feliz con la sucursal, lo fusionaría con el maestro y seguiría. Pero no estoy seguro de si eso es lo que debería hacer. ¿Debo, en cambio, crear una nueva twig fuera de la twig que ya empujé y desarrollé allí?

Sí, eso funcionaría muy bien con los cambios futuros en el master del repository upstream. Un ejemplo de esto es la unión de PR de otro desarrollador antes que la suya.

¿Cómo debo gestionar un mayor desarrollo? Tenga en count que el trabajo de desarrollo que deseo hacer requiere los cambios

 (feature branch) -commit1--commit2--commit3 \ (pr) ------------------------master 

Diga que este es el estado actual de su flujo de desarrollo. El administrador del repository en sentido ascendente hizo algunos comentarios y tuvo que realizar algunos cambios más en esa twig de feature . Como se ha separado de la feature para trabajar en su próxima adición, terminará con diferentes historiales en la twig de feature y en la nueva en la que está trabajando.

 (new feature branch) -commit1--commit2--commit3--newcommit1--newcommit2 / -commit1--commit2--commit3--commit4--commit5 / (pr) ---(possibly other PRs getting merged)--master 

La image de arriba será el estado actual. Ahora, el próximo paso sería averiguar cómo get los últimos cambios de la twig de feature a la nueva twig de características (específicamente, confirma commit4 y commit5 ). Las dos forms de hacer esto serían usar git rebase o git merge . Esta es la secuencia de pasos que seguiría:

  1. Volver a la twig master
  2. Obtener todos los cambios
  3. Ir a la new feature twig de new feature
  4. Ejecuta git rebase master en él

Esto implicará hacer un empuje de fuerza a su twig remota de GitHub ya que el historial actual de la new feature twig de new feature habrá cambiado. A algunos desarrolladores no les gusta por esta razón.

La segunda forma es usar git merge . 1 a 3 pasos son lo mismo. El paso 4 implicaría el command git merge master . Después de ejecutar esto y presionar a la twig de su control remoto, si compara las twigs de new feature master y new feature , los cambios includeán solo los newcommit1 y newcommit2 .

Esta estrategia le permite continuar su flujo de trabajo de desarrollo en el caso que ha mencionado. Esto solo considera el caso donde sus cambios eventualmente se combinan.