¿Cómo usar el post pnetworkingeterminado de cometer git después de resolver los conflictos de fusión?

Después de hacer una combinación y resolver conflictos, ¿hay alguna manera "fácil" de aceptar el post de confirmación generado por defecto desde la línea de command? Uno de nuestros desarrolladores resolverá todos los conflictos y luego realizará un git commit -m"Merge Commit" que reemplaza el post de confirmación generado que enumeró todos los files de conflicto. Me gustaría tener una bandera diferente que simplemente tome el file actual sin modificaciones. Sé que hay una opción -F o –file =, pero eso requiere saber el nombre del file todo el time.

Gracias

Obviamente, la respuesta "correcta" aquí es hacer que tu desarrollador siga las prácticas correctas para tu equipo al generar confusiones de fusión. Tenga en count que el comportamiento que desea solía ser el pnetworkingeterminado, y que recientemente Git comenzó a exigir posts de confirmación "generados por el ser humano" para las fusiones. Eso fue por una razón, y no fue para que los desarrolladores cortaran el process con un post sin sentido.

¿Tal vez el desarrollador está generando confusiones de fusión cuando debería volver a basarse?

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

Según los documentos , intenté con este simple command y funcionó para mí:

 git commit --no-edit 

Después, ejecute git log para confirmar que se ha utilizado el post pnetworkingeterminado.

De forma pnetworkingeterminada, cuando una fusión falla, el post de confirmación que se utilizará se guarda en un file en la carpeta git, generalmente .git/MERGE_MSG . Una vez resueltos los conflictos, la ejecución de la git commit alimentará este post guardado al editor pnetworkingeterminado.

Si el post no se está recogiendo por sí solo, se puede alimentar al command git usando la opción --file , que lee el post de confirmación de un file:

 git commit --file .git/MERGE_MSG 

Simplemente configure el editor con un command 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 directory actual no es el directory más alto
  • El repository actual es un submodule Git que no tiene el directory .git pero un file .git .

Y opcionalmente:

  • MERGE_MSG contiene algo de información sobre files con conflictos.

Los primeros dos 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 repositorys y submodules "normales". Si los marcadores de conflicto marcados con # deben descartarse, para simplificar, solo se podría tomar la primera línea para el post 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 podía hacer que Git emitiera comillas para ser procesado en los commands generados con bash (de lo contrario, la git commit se quejaría por confirmaciones parciales durante las fusiones).


Git 2.12.0 que se lanzó hace dos días presenta la git merge --continue realizando una fusión de compromiso que se detuvo en conflictos durante la fusión. Funciona bien para los submodules también, pero no acepta --no-edit , al less todavía, por lo que se sugiere que un editor cambie el post de confirmación antes de concluir la fusión.

Si realmente quiere hacer cumplir esta regla, entonces puede haber una forma de forzar esto usando git hooks.

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

Pero, suponiendo que funcione como queremos (que es una suposition), entonces puede tener un gancho de commit-msg git que verifique el post que el usuario escribió y afirmó

  1. ¿Es esto una fusión de cometer?
  2. si es así, ¿los files de demostración combinados difieren?
  3. si es así, ¿la cadena "Conflicts:" está seguida de esos nombres de file?

Si esas condiciones fallan, haga que el script imprima en la pantalla una explicación de lo que está mal, y luego devuelva un valor distinto de cero para cancelar la confirmación. Puede hacer que los desarrolladores instalen este enlace de confirmación, o también puede instalarlo en el server para garantizarlo.