Por favor considere este escenario:
Gerrit
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? 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.