git pull no fusiona files si alguno de los deltas está en conflicto (necesita combinación manual)

Por favor considere este escenario:

  1. Hice un cambio de X cantidad de files, ingresé a Gerrit
  2. Joe hace un cambio de número Y de files, Z de los cuales se cruzan con mi set de cambios
  3. La revisión del código de Joe se atesting y se fusiona en la sucursal remota, la mía se mantiene en la etapa de revisión del código
  4. Debido a que Joe y yo cambiamos un número Z de files simultáneamente y sus cambios se aprobaron antes que los míos, tengo que fusionar mis cambios en los files Z que Joe cambió también.
  5. Estoy en la misma twig de git en la que estaba cuando ingresé a Gerrit y tengo que serlo porque esa es la única twig que tiene mi ID de cambio, que es el único vínculo entre git y Gerrit (para modificar mi revisión de Gerrit existente, la enmienda debe estar dentro del mismo compromiso; de lo contrario, crearía una nueva sucursal y facilitaría todo, pero no puedo hacerlo porque no tiene mi ID de cambio)
  6. Cuando hago un git pull en esa misma bifurcación, la parte fetch (remote-> local) va bien pero la parte merge (branch local-> working dir) falla debido a los files Z que requieren una fusión manual. Sin embargo, hay cambios de file (Y less Z) que no están en conflicto en absoluto. ¿POR QUÉ NO GIT FUSIONARON LOS ARCHIVOS, YA QUE NO HAY CONFLICTO QUE DEBERÍA DETENERLO?
  7. Hago una fusión manual de files Z pero ahora el set de cambios de git por etapas los agrupa junto con los cambios Y less Z con los que no tengo nada que ver y los muestra como modificados / eliminados en el git status . Fueron modificados / eliminados en el control remoto, no local. Si realizo una confirmación, se includeán en la confirmación, mientras que solo deseo include los files Z en mi confirmación. Por lo tanto, no puedo comprometerme porque si lo hago, todos los files Y se mostrarán y se includeán en la revisión del código cuando no sea así, lo que complicará la revisión del código.

Como dije en el punto 5. anterior, resolvería este argumento creando una nueva sucursal, PERO no puedo hacer eso porque no tendré mi ID de cambio en esa sucursal que necesito enganchar en el mismo boleto existente de Gerrit.

Las dos preguntas principales son:

Q1. ¿Cómo / puedo hacer que Git fusione los files que no están en conflicto en la etapa de fusión de la extracción de git mientras deja que los conflictos se resuelvan manualmente? De esta forma, una vez que haya terminado de hacer la fusión manual, puede hacer una compilation con lo último del control remoto para asegurarse de que pueda comstackr antes de realizar cualquier compromiso, incluso localmente. Me parece que este es un error fundamental con git (a less que esté haciendo algo mal, por ejemplo, no usar alguna opción con mi git pull )

Q2. ¿Hay alguna manera de impulsar una revisión de Gerrit existente (enmendarla) usando una ID de compromiso / cambio diferente de la que se usó para crear la revisión inicialmente? Hasta ahora, la única respuesta que he podido get a esta pregunta tanto interna como en Internet es NO, pero para mí eso parece ser otra gran deficiencia. Debido a que la restricción de Gerrit, como se explicó anteriormente, te limita a utilizar la característica más fuerte de git, lo que hace que las sucursales locales (en las que no tienes esa ID de cambio) fácilmente.

Para actualizar su sucursal local con cambios en sentido ascendente, vuelva a establecer su compromiso, no se fusione. git pull tiene una opción --rebase que puede usar (y puede cambiar su .gitconfig para que sea la pnetworkingeterminada). La fusión crea un compromiso de fusión inútil que tendrá que revisarse, lo que no tiene ningún sentido, lo que se observa en el n. ° 7.

Q1. Esto es un malentendido. Git fusionará todos los files que pueda, pero le pedirá su ayuda para resolver conflictos. No sé qué te hace sacar la conclusión de que esos files no se tocaron.

Q2. Parece que está combinando la identificación de compromiso y la ID de cambio. El ID de confirmación cambia si modifica una confirmación (incluso si no realiza un cambio en el contenido de los files o el post de confirmación) mientras que la ID de modificación es un identificador específico de Gerrit en el pie de página del post de confirmación. Gerrit lo usa para conectar confirmaciones con diferentes ID (SHA-1) con cambios en Gerrit. Si por algún motivo no puede modificar el compromiso original cuando desea cargar un nuevo parche para un cambio, puede simplemente agregar el pie de página Cambiar Id a cualquier compromiso que desee aplicar.

una vez que se ha presionado un cambio para revisar la bifurcación, se puede search y modificar sin necesidad de la confirmación local original. Por lo tanto, en la twig FETCH_HEAD puede fusionar / volver a establecer la base de la twig remota, modificarla y pulsar como nuevo patchset. Eso es. Entonces, todos los commit tienen una twig única en Gerrit. Y creo que no tiene sentido presionar el commit modificado con un nuevo changeId. Significaría que el original debería ser abandonado. Con esta técnica, los códigos pueden compartirse con todos y ser modificados por todos, sin enviar el código a una sucursal remota.