¿Qué debo hacer en el medio de trabajar en una twig de características y no puedo comstackr mi proyecto sin tirar y fusionar el maestro a la twig de características?

En un repository de proyectos C #,

  • Creé una twig de características de la twig principal y luego trabajé en la twig de características. En ese momento, aún no he git add o hecho git commit mi trabajo.

  • Traté de ver si el proyecto C # con mi cambio podría comstackrse, pero no pudo. Luego me di count de que un compañero de trabajo había cambiado la twig principal, así que revisé la twig principal y ejecuté git pull para actualizar el maestro, y luego fusioné el maestro con mi twig de funciones, donde resolví algunos conflictos de fusión manualmente. Entonces el proyecto C # podría ser comstackdo. En este punto, los cambios no configurados consistieron en mi trabajo y mis cambios manuales para resolver el conflicto de fusión.

  • Luego continué trabajando en mi twig de características. Después de terminar, ejecuté git add y git commit para crear una nueva confirmación que consistiera de todo mi trabajo en la twig de características y mis cambios para resolver el conflicto de fusión. Luego, envié mi twig de características a GitHub, creé una request de extracción para fusionarla a maestra en GitHub y asigné a un queueborador para que revisara la request de extracción.

Ahora me doy count de que es malo para el revisor distinguir mi trabajo en la twig de características de mis cambios para resolver el conflicto de fusión en la única confirmación, y es mejor crear diferentes compromisos para separar los cambios para el conflicto de fusión y mi trabajo en el twig de características

Sin embargo, si vuelvo a encontrar un caso similar (es decir, en el medio de trabajar en una twig de características, descubro que no puedo comstackr mi proyecto sin extraer el maestro y unirlo a la twig de características), no estoy seguro de cómo separarlo cambios para fusionar y cambios para mi trabajo en diferentes commits. ¿Qué haré entonces?

Gracias.

Esta respuesta tiene dos partes: 1. Cómo arreglar la situación a mano, y 2. Cómo evitar el mismo problema en el futuro. Estas dos partes requieren enfoques bastante diferentes.


Reparar la situación actual.

El problema es que ha publicado una confirmación que contiene cambios que ya estaban incluidos en alguna otra confirmación. Esto es malo, ya que generará conflictos de fusión más adelante.

Para solucionar la situación, debe recrear su twig de características desde la confirmación de base correcta. Puedes hacer esto con los siguientes commands:

 git checkout feature-broken # git status to ensure that the working directory and index are clean git reset --mixed <the-commit-you-actually-want-to-base-your-work-on> # git status and git diff, to see what changes your feature branch actually wanted to introduce git checkout -b feature-repaird git add ... git commit ... 

En esta secuencia, tomas el estado del directory de trabajo tal como lo muestra tu twig de funciones discontinua, y creas un compromiso diferente con los mismos contenidos pero con un compromiso padre diferente. Esa es toda la solución que necesita (aparte de la feature-broken retracción feature-broken , por supuesto).

Sin embargo, no estoy seguro de qué base de compromiso realmente quieres usar. Tu pregunta parece que todavía no has cometido ningún trabajo previo en tu twig de funciones interrumpidas, en ese caso la base de compromiso para usar sería master . Si ya se ha comprometido a trabajar en su twig de funciones rotas, habrá creado una combinación de fusión que mastica sus cambios con la resolución de conflictos. En ese caso, primero debe crear una confirmación de fusión limpia para sus cambios previamente comprometidos, y basar el git reset --mixed en esa nueva confirmación.


Cómo evitar esto en el futuro.

La respuesta es git stash . Antes de llevar a cabo los cambios preliminares, simplemente emite un git stash para eliminar los cambios locales. Una vez que esté en el compromiso correcto de basar su trabajo, simplemente haga un git stash pop para recuperar sus cambios locales (arreglando cualquier conflicto de fusión que encuentre).