tipos tag sirve qué para nos existen etiquetas cuando crear creamos conflictos commits git merge message commit conflict

tag - ¿Cómo usar el mensaje de confirmación de git predeterminado después de resolver conflictos de combinación?



tipos de etiquetas en git (6)

De forma predeterminada, cuando una combinación falla, el mensaje de confirmación que se iba a usar se guarda en un archivo en la carpeta git, generalmente .git/MERGE_MSG . Una vez resueltos los conflictos, la ejecución de git commit enviará este mensaje guardado al editor predeterminado.

Si el mensaje no se recoge por sí solo, se podría --file al comando git mediante la opción --file , que lee el mensaje de confirmación de un archivo:

git commit --file .git/MERGE_MSG

Después de realizar una fusión y resolver conflictos, ¿existe una forma "fácil" de aceptar simplemente el mensaje de confirmación generado de forma predeterminada desde la línea de comandos? Uno de nuestros desarrolladores resolverá todos los conflictos y luego hará un git commit -m"Merge Commit" que reemplaza el mensaje de confirmación generado que lista todos los archivos de conflictos. Me gustaría tener una marca diferente que solo tomaría el archivo actual sin modificaciones. Sé que hay una opción -F o --file =, pero eso requiere saber el nombre del archivo todo el tiempo.

Gracias


Obviamente, la respuesta "correcta" aquí es hacer que su desarrollador siga la práctica correcta para su equipo al generar confirmaciones de combinación. Tenga en cuenta que el comportamiento que desea que solía ser el predeterminado, y que recientemente recientemente git comenzó a exigir mensajes de compromiso "generados por el hombre" para las fusiones. Eso fue por una razón, y no fue para que los desarrolladores hicieran un cortocircuito en el proceso con un mensaje sin sentido.

¿Quizás el desarrollador está generando confirmaciones de combinación cuando debería ser rebasado?

Dicho esto, la confirmación de combinación es la salida de git fmt-merge-msg , a la que tendría que alimentar a los padres de la confirmación de combinación.


Según los documentos , solo probé este comando simple y funcionó para mí:

git commit --no-edit

Luego, ejecute git log para confirmar que se ha usado el mensaje predeterminado.


Si realmente quieres hacer cumplir esta regla, entonces podría haber una manera de forzar esto usando ganchos de git.

Cada vez que hay un conflicto de fusión, un ''diff combinado'' le mostrará qué archivos estaban en conflicto: git diff HEAD HEAD^1 HEAD^2 --name-only . No sé si técnicamente es posible que una diferencia combinada muestre más archivos que solo conflictos.

Pero, suponiendo que funcione como queremos (lo que es una suposición), entonces puede tener un gancho git commit-msg que comprueba el mensaje que el usuario escribió y afirma.

  1. ¿Es este un compromiso de fusión?
  2. Si es así, ¿combinan diff los archivos?
  3. si es así, ¿la cadena "Conflictos:" seguida de esos nombres de archivo?

Si esas condiciones fallan, entonces haga que el script imprima para detectar una explicación de lo que está mal y luego devuelva el cero para cancelar la confirmación. Puede hacer que los desarrolladores instalen este enlace de confirmación o también puede instalarlo en el servidor para imponerlo con seguridad.


Solo configura el editor a un comando que no haga nada:

GIT_EDITOR=true git commit


git commit --file .git/MERGE_MSG como ya se mencionó está bien, pero ignora algunos puntos:

  • El directorio actual no es el directorio más alto
  • El repositorio actual es un submódulo de Git, por lo que no tiene el directorio .git sino un archivo .git .

Y opcionalmente:

  • MERGE_MSG contiene información sobre archivos con conflictos.

Los dos primeros puntos se pueden usar con git rev-parse :

git commit -F "$(git rev-parse --git-dir)/MERGE_MSG"

O, alternativamente, con un alias de Git:

commit-merge = !cat $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -

Esto funciona tanto en repositorios "normales" como en submódulos. Si los marcadores de conflicto marcados con # deben descartar, para simplificar, solo se puede tomar la primera línea para el mensaje de combinación:

git commit -m $(head -1 $(git rev-parse --git-dir)/MERGE_MSG)

U otro alias:

commit-merge = !head -1 $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -

Tuve que usar la tecla -F en los alias porque no pude hacer que las citas de Git se procesen en los comandos generados con bash (de lo contrario, git commit se quejaría de confirmaciones parciales durante las combinaciones).

Git 2.12.0, que se released dos días, introduce git merge --continue para hacer un commit de fusión que se detuvo en los conflictos durante la fusión. También funciona bien para los submódulos, pero no acepta --no-edit , al menos todavía, por lo que se sugiere un editor para cambiar el mensaje de confirmación antes de concluir la fusión.